STSdb,最強純C#開源NoSQL和虛擬文件系統


 

回顧

幾個月前寫了一篇文章,關於 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)和實時業務的開發,點擊這里看公司介紹


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM