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 順序的連續訪問,這能夠實現對字符串的前向匹配查找和整數的範圍查找。連續訪問的性能遠快於隨機訪問。