Kyoto Cabinet是一个key-value数据库管理程序的library ,key和value均可以使二进制或者字符串格式。数据存储存分hash和b+ tree模式。 Kyoto Cabinet很是快,在hash模式下,插入100万数据只要0.9秒,在b+ tree模式下只要1.1秒。查询200万条数据也只须要1秒。而且Kyoto Cabinet的数据文件占用的空间也很是小。Kyoto Cabinet的可伸缩性也是很是好的,数据库文件能够达到8EB。(1EB=1024PB,1PB=1024TB)。 -msiz num : specifies the size of the memory-mapped region. 也就是指定内存映射区域大小 -bnum num : specifies the number of buckets of the hash table.指定哈希表的桶数量。官方推荐是记录数的两倍或者更高 db.kyotocabinet.gds.write.path=/a/b/c/product.kch#msiz=1000000000#bnum=15000000 实践:以较大的内存写入,以较小的内存读出。
DB db = new DB(); db.open(dbPath, mode) mode=DB.OCREATE|DB.OWRITER|DB.OTRUNCATE mode表明写模式,而且若是原来路径的文件存在,删除并从新建立;若是不存在也建立 以kch结尾的文件,表明使用hash表存储数据 以kct结尾的文件,表明使用B+ tree表存储数据 Hash 数据库 的每一个操做的时间复杂度是 O(1),所以理论上,性能是常量而与数据库的规模无关。 hash值的碰撞是经过分离连接(separate chaining)管理的。每一个链(chain)的数据结构是二分查找树。
B+ tree 数据库的每一个操做的时间复杂度是 O(log N),底数为2,所以理论上,性能是数据库规模的对数。尽管B+ tree 数据库的随机访问性能要慢于 hash数据库,但B+ tree数据库支持对 key 顺序的连续访问,这能够实现对字符串的前向匹配查找和整数的范围查找。连续访问的性能远快于随机访问。