STSdb,最強純C#開源NoSQL和虛擬文件系統
2013-05-21 19:37 靈感之源 閱讀(21475) 評論(79) 收藏 舉報
回顧
幾個月前寫了一篇文章,關于 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)和實時業務的開發,點擊這里看公司介紹。
浙公網安備 33010602011771號