回顧
幾個月前寫了一篇文章,關於 C#寫的NoSQL開源項目/系統(系列),看過該文章的同學,估計會對.NET能實現高效的NoSQL是有信心的。幾個月過去了,有了新進展。
STSdb是什么
再來說明一下STSdb是什么:STSdb是C#寫的開源嵌入式數據庫和虛擬文件系統,支持實時索引,性能是同類產品的幾倍到幾十倍,訪問官方網站。
特性
- 支持幾十億級別的數據存取
- 支持TB級別文件大小
- 並行架構,在服務器上性能爆快
- 實時索引
- 內置壓縮
- 內置自動序列化
- 無數據碎片
- 快速隨機插入
- 支持任意數據類型
- 支持稀疏分散的文件(byte[])
- 純C#,支持mono
為什么?
數據庫的共同點
每個數據庫都有一個共同點,就是受限於索引結構,因此每當改進了索引數據結構,性能也隨之大增。
性能瓶頸
在數據庫系統中,每當對數據進行索引,數據的邏輯位置會被映射到物理設備,這個映射嚴重依賴設備的尋址時間。
解決辦法
當遇到性能瓶頸時:
辦法就是,不對每個操作都進行一次尋址,而是每次尋址都做多個操作。
解決方案-WATERFALLTREE™ (瀑布樹)
STSdb 4.0突破性地發現並實現了Waterfall-tree (瀑布樹)樹結構。Waterfall-tree是注冊商標,並且擁有專利。與傳統的B+樹類似,但B+樹是同步操作,而瀑布樹是分組異步操作。
現有的解決方案有一個共同的缺點:當索引隨機主鍵的時候,I/O性能不高(退化嚴重)。
而STSdb4.0的瀑布樹帶了來前所未有的性能提升。
下圖直觀地展示了瀑布樹的原理:
性能比較
數據庫 | 存儲設計 |
---|---|
Amazon Dynamo DB | Zero-Hop Distributed Hash Table |
Cassandra | Memtable / SSTable |
Couch DB | Append-only B-tree |
Db4objects | B-tree |
Google Big Table | SSTable (log-structured storage) |
H base | Memtable / SSTable on HDFS |
Level DB | LSM-tree |
Memcached | Memory caching |
Mongo DB | B-tree |
Oracle Berkeley DB | B+-tree |
Perst | B-tree/T-tree/R-tree/Patricia trie/KD-tree |
Redis | In-memory only with background snapshots |
Scalaris | In-memory only |
Tokyo Cabinet | Hash or B-tree |
隨機寫
隨機讀
順序寫
順序讀
這個性能,只能用凶殘來形容啊!
應用領域
Hello STSdb
打開數據庫並寫入數據
using (StorageEngine engine = new StorageEngine("stsdb4.sys", "stsdb4.dat")) { XIndex<int, string> table = engine.OpenXIndex<int, string>("table"); for (int i = 0; i < 1000000; i++) { table[i] = i.ToString(); } table.Flush(); engine.Commit(); }
讀取數據
using (StorageEngine engine = new StorageEngine("stsdb4.sys", "stsdb4.dat")) { XIndex<int, string> table = engine.OpenXIndex<int, string>("table"); foreach (var row in table) //table.Forward(), table.Backward() { Console.WriteLine("{0} {1}", row.Key, row.Value); } }
更多例子
可以訪問這里查看更多的例子,或者下載類庫或代碼,里面有pdf文檔。
許可
盡管STSdb在官網沒有說明許可,但從老版本的開源項目托管網站來看,許可是GPL 2.0+。
線程安全
大家比較關心線程安全,我在這里講解一下。假設有某XIndex:FooIndex,有2種情況:
1. 只有一個實例,在多個線程中訪問該實例,那么FooIndex線程不安全;
2. 每個線程都有單獨的實例,那么FooIndex線程安全。
C/S架構
4.0最終版會帶來C/S架構,這樣,STSdb不再是單機NoSQL,而是跟MongoDB那樣可以通過Java/.NET客戶端訪問服務器端。
說明
雖然我在微博上說明了這個產品不是我寫的,我只是在業務系統中使用了這個產品,但一些網友誤會了這是國產,更誤會我是作者,這個我在這里道歉。
STSdb的作者是保加利亞的STS Soft SC公司,該公司多年來從事大數據(Big Data)和實時業務的開發,點擊這里看公司介紹。