java Python google mysql apache php Android wordpress 程序员 Windows shell 开源 linux 微软 centos 编程 云计算 nginx Firefox Ubuntu

NoSQL 數據庫 Kyoto Cabinet

Kyoto Cabinet 是 Tokyo Cabinet 的改進版本,采用C++開發 NoSQL 數據庫。Kyoto Cabinet 數據庫是一個簡單的包含記錄的數據文件,每個記錄是一個鍵值對(key/value),key和value都是變長的字節序列。key和 value既可以是二進制的,也可以是文本字符串。Kyoto Cabinet中的key必須唯一,Kyoto Cabinet既沒有表的概念,也不存在數據類型。所有的記錄被組織為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。

延伸阅读

    评论