Kyoto Cabinet
KC是一個數據庫管理的 lib,是 Tokyo Cabinet 的改進版本。數據庫是一個簡單的包含記錄的數據文件,每個記錄是一個鍵值對(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。