当前位置: 首页 > 工具软件 > Kyoto Cabinet > 使用案例 >

Kyoto Cabinet库的编译说明

有骏奇
2023-12-01

简介

      Kyoto Cabinet是一个数据库管理的库,是TokyoCabinet的改进版本。数据库是一个简单的包含记录的数据文件,每个记录是一个键值对(Key/Value),Key和Value都是变长的字节序列。Key和 Value既可以是二进制的,也可以是文本字符串。数据库中的Key必须唯一。数据库既没有表的概念,也不存在数据类型。所有的记录被组织为Hash表或 B+树。

特点

在数据库中,可以储存Key-Value记录,也可以根据Key来获取和删除记录。还可以遍历访问所有的Key。这些方法类似于UNIX标准中的DBM库(及后来的NDBM和GDBM)。因为KC的高性能,可以作为DBM的替代品。

  Hash数据库的每个操作的时间复杂度是 O(1),因此理论上,性能是常量,而与数据库的规模无关。在实践中,性能由内存或存储设备的速度决定。如果数据库的大小小于内存大小,性能表现为内存的速度,比STL中的std::map要快。当然数据库大小可以大于内存大小,最大上限是8EB(1024×1024×1024GB)。即使在这样的情况下,每个操作也只需要一两个存储设备的seek操作。

  B+ Tree 数据库的每个操作的时间复杂度是 O(log N)。因此理论上,性能是数据库规模的对数。尽管B+ Tree数据库的随机访问性能要慢于Hash数据库,但B+ tree数据库支持对Key 顺序的连续访问,这可以实现对字符串的前向匹配查找和整数的范围查找。连续访问的性能远快于随机访问。

  API是基于面向对象设计的,Hash数据库和B+ Tree数据库都有从同一个超类继承而来的同样的方法。除了他们,还有7种数据库也继承了同样的超类。Prototype Hash数据库采用标准容器 std::unordered_map 实现,Prototype Tree 数据库采用标准容器std::map 实现,Stash 数据库是采用Naive Hash Map的原始实现来节省内存,Cache Hash 数据库是采用 LRU删除算法的双向链接Hash Map 原始实现。Cache Tree 数据库是基于Cache Hash 数据库并提供B+ Tree的机制。Directory hash 数据库是采用文件系统的目录机制实现,每个记录存储为一个目录下的文件。Directory Tree 数据库基于Directory hash数据库并提供B+ Tree的机制。所有的数据库都有相关的事物(Transaction)和游标(Cursor)的实用方法。软件也包含了命令行接口的程序。

  KC的运行速度非常快。例如,保存一百万记录到Hash数据库中只需要0.9秒,保存到B+ Tree数据库只需要1.1秒。而且数据库本身还非常小。例如,Hash数据库的每个记录头只有16字节,B+ Tree数据库是4字节。更进一步,KC的伸缩性非常大,数据库大小可以增长到8EB(9.22e18 Bytes)。

  KC是C++语言编写的,并提供C++、C、Java、Python、Ruby、Perl 和 Lua 的API。KC可以用在所有符合 C++03标准并带TR1库扩展的平台。KC是GNU General Public License的自由软件。FOSS License例外也提供用来适应其它免费和开源的licenses。另一方面也提供商业license。如果你在专有软件中使用KC,那么你需要商业 license。

编译

KC(KyotoCabinet)是TC(Tokyo Cabinet)的C++升级实现,而且更新比较频繁。如果是纯Key-Value存储的话,KC是一个很好的选择。KT(Kyoto Tycoon)是KC的一个网络接口。

Kyoto Cabinet的官方项目网址为:http://fallabs.com/kyotocabinet

当前最新版本为1.2.76(kyotocabinet-1.2.76.tar.gz),下载地址为:

http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.76.tar.gz

For Linux

         Linux下环境要求:Linux2.6+、gcc 4.2+、GNU make和ZLIB1.2.3+。

1)  查看内核版本:uname -r

2.6.18-194.el5

2)  查看GCC版本:gcc -v

gcc 版本 4.1.2 20080704 (Red Hat 4.1.2-48)

3)  查看ZLIB版本:rpm -qa |grep zlib

zlib-1.2.3-3

4)  查看make的版本:make -v

GNU Make 3.81

Linux下编译和安装KC非常简单,步骤如下:

1)  下载源代码包

# wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.76.tar.gz

2)  解压缩源码包

# tar zxvf kyotocabinet-1.2.76.tar.gz

3)  配置和编译

         #./configure && make

4)  执行自检测试

         #make check

5)  安装库

         #sudo make install

         安装完成后,KC头文件存放在/usr/local/include目录中,KC库文件存放在/usr/local/lib中,KC执行文件位于/usr/local/bin目录中。

         生成libkyotocabinet.a/libkyotocabinet.so的静态和动态库。

         注1:KC要求gcc 4.2以后的版本,但是KC1.2.76版本也可以在RHEL 5.5 x64(gcc 4.1.2)下编译通过。

For Windows

         Windows下环境要求:VS 2008SP1(或者)VS 2010、nmake。

         Windows下编译和安装KC,步骤如下:

1)   解压源代码到本地硬盘上

假设源代码所在目录为H:\kyotocabinet-1.2.76。

2)   补充stdint.h头文件

https://code.google.com/p/msinttypes/网址下载,把stdint.h文件解压到H:\kyotocabinet-1.2.76。

3)   修改KC源代码正确使用STL库

由于std空间中的unordered_map、hash、regex、smatch等都在std::tr1的空间中。

修改1:打开kccommon.h文件,找到第95行的代码,如下:

namespace std {

using tr1::hash;

using tr1::unordered_map;

using tr1::unordered_set;

}

把上面代码移动(剪切/粘贴)到#endif之后的位置,保存文件。

修改2:打开kcregex.cc文件,找到第25行,在#endif前面添加下面几行代码:

namespace std {

         using tr1::regex;

         using tr1::smatch;

         using tr1::regex_search;

         using tr1::regex_replace;

}

修改完毕后保存文件。

4)   修改VCmakefile文件

根据VS(2008 SP1)的VC++的目录修改VCMakefile文件第11行,如下:

VCPATH = D:\Program Files\Microsoft Visual Studio 9.0\VC

SDKPATH = C:\Program Files\Microsoft SDKs\Windows\v6.0A

                  根据运行时使用库的类型修改VCMakefile文件:

a)        多线程动态库Release版本,修改为如下:

/DNDEBUG/D_CRT_SECURE_NO_WARNINGS \

/O2 /EHsc /W3 /wd4244 /wd4351 /wd4800 /MD

b)        多线程动态库Debug版本,修改为如下:

/D_DEBUG /D_CRT_SECURE_NO_WARNINGS \

/O2 /EHsc /W3/wd4244 /wd4351 /wd4800 /MDd

提示: 缺省情况下,使用/MT链接到LIBCMT.LIB库上进行编译,如果希望使用MSVCRT.LIB,使用/MD选项进行重新编译。如果你的环境是64位版本,增加“/D_SYS_WIN64_”选项来改进性能。

注:应用程序和动态库使用的运行时库必须一致,否则会产生链接错误。

5)   清除和重新编译KC

从“Visual Studio 2008 Command Prompt”快捷方式中进入DOS命令行窗口。

# h:

# cd kyotocabinet-1.2.76

# nmake /f VCmakefileclean

# nmake /f VCmakefile

注:使用/MD和/MDd选项都生成名为libkyotocabinet.lib的库,需要自己修改名称。

6)   执行自检测试

# nmake /f VCmakefile check

7)   生成打包目录

# nmake -f VCmakefile binpkg

在源代码目录下生成kcwin32目录,其中包括include/bin/doc/lib四个目录,可以进行打包发布使用。

注0:如果需要生成/MD和/MDd的静态库,那么需要修改VCmakefile重新编译。

注1:在安装VS 2008 SP1补丁的VS 2008上成功编译KC库。

注2:参考网址http://fallabs.com/kyotocabinet/spex.html#features

使用

示例代码请参考源代码目录中的example子目录,其中包含各种形式数据库的例子程序。

注1:需要关闭告警信息包括4244;4996;4351。


 类似资料: