Kyoto Cabinet

openkk 13年前發布 | 14K 次閱讀 NoSQL數據庫 NOSQL

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。

項目主頁:http://www.baiduhome.net/lib/view/home/1322707759265

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!