近日, Christoph Rupp在highscalability.com上發表了一篇文章,介紹由他創建的分析型嵌入式鍵值數據庫hamsterdb。它用C/C++編寫,是一個速度非常快的輕量級NoSQL數據庫引擎,支持事務、數據庫游標、內存數據庫和遠程網絡訪問,類似谷歌的leveldb和甲骨文的BerkeleyDB。
據作者介紹,hamsterdb并不是細分市場上的一個新晉競爭者。事實上,它已經出現超過9年了。在這段時間里,它發展非常快,其重點已經從單純的鍵值存儲轉向了分析型數據庫,提供類似列式存儲數據庫的功能。
hamsterdb是單線程、非分布式的,用戶通常直接將它鏈接到他們自己的應用程序中。它提供了獨特的事務實現以及其它獨特的功能,非常適合于分析型工作負載。它可以在本地C/C++中使用,也有面向Erlang、Python、Java、 .NET,甚至是 Ada的綁定。它被用在嵌入式設備和本地應用程序中,也可以為云實例提供緩存和索引服務,已經有數以百萬計的部署。
hamsterdb有一個獨特的功能,它能識別模式信息。大多數鍵值存儲并不關心鍵的類型,而它支持兩種類型的鍵:二進制鍵和數值鍵。hamsterdb數據庫是BTree索引,既可以存儲在文件中,也可以存儲在內存中。而BTree的實現是它成為分析型數據庫的關鍵。其實現方式非常緊湊,減少了I/O,而且可以更好的利用CPU緩存。
另外,hamsterdb有與SQL命令COUNT、COUNT DISTINCT、SUM和AVERAGE等價的API,并支持可變長度的鍵,允許鍵重復,以及支持read-committed隔離級別的ACID事務。
按照Rupp的說法,hamsterdb最強力的特性是可測試性。數據庫的根本——甚至比性能都重要——就是不應該丟失數據。在9年的開發過程中,他不斷地重寫部分代碼或者嘗試新的想法,但高測試覆蓋率給了他自信,認為這些更改不會破壞任何東西。他有大約1800個單元測試和35000個驗收測試,以及一組模擬崩潰的測試,用于測試hamsterdb的可恢復性。這些測試都是高度自動化的。
Rupp還介紹了hamsterdb的商業版本hamsterdb pro。該版本提供了針對鍵、記錄、日志的重量級壓縮,AES加密,及針對葉節點查找的SIMD優化。還有更多的壓縮算法正在進行或規劃中。
在文章的最后,Rupp用谷歌的基準測試將hamster 2.1.8與leveldb 1.15作了性能對比。他得出了下面的結論:
對于隨機讀,hamsterdb性能要好于leveldb。對于隨機寫的情況,只要數據量不是太大,hamsterdb就更快。而從1千萬鍵及以上開始,hamsterdb就會遭受BTree數據庫的傳統問題:大量的非序列性I/O和高磁盤尋道延遲。
作者認為,這可以很好地說明hamsterdb的分析能力。尤其是,sum和count運算都可以很好地擴展。序列性插入和掃描也是其亮點,不管數據量多大,它都可以非常快。
有興趣的讀者可以下載查看全部的測試結果,以及從GitHub上下載hamsterdb的源代碼。
posted on 2014-08-16 03:01
憶風 閱讀(182)
評論(0) 編輯 收藏