Sophia:為高負載而設計的可嵌入K/V數據庫

jopen 9年前發布 | 11K 次閱讀 Sophia NoSQL數據庫

Sophia是一個為高負載而設計的可嵌入K/V數據庫,基于BSD許可協議開源,代碼托管在GitHub。Sophia和其架構來源于對原始算法約束的研究和重新思考,如目前日益流行的基于日志文件的數據結構(LSM-treeB-tree等)。大多數的基于日志的數據庫都會將自己的文件存儲作為一個存儲文件的集合進行組織,并定時合并文件。當查找數據、Range時性能表現非常低。而Sophia改進了這種解決方案,它采用了只追加模式,還提供了更加快速的讀取數據操作。

Sophia的主要特征如下:

  • 完全只追加的MVCC的存儲引擎,旨在快速地進行寫操作,并優化了讀操作;
  • 支持ACID事務,基于快照隔離而實現的真正輕量級事務控制;
  • 支持異步,能夠選擇阻塞或非阻塞的方式執行事務處理過程;
  • 支持壓縮,最少兩到十倍壓縮比率,壓縮算法包括LZ4ZSTD
  • 基于BSD開源協議開源。
  • </ul>

    Sophia的主要存儲單元是節點(Node),每個節點代表一個獨立的文件,該文件被分配到內存區域(Region)索引和兩個內存Key索引。 節點文件有多個(Branch)組成,每個分支由一套已排序的區域和區域索引構成。一個區域持有許多具有值的Key,它同一個B-Tree頁具有相同的語 義,但是以不同的方式組織。區域沒有樹結構或者任何內部頁面到頁面的關系,并且因此沒有元數據開銷。一個區域索引由一個有序的區域表示,這些區域具有最小 和最大Key以及磁盤上的引用。一個Key索引與0層的LSM-tree非常相似,但是具有不同生命周期的Key。Sophia的架構如下圖所示:

    Sophia:為高負載而設計的可嵌入K/V數據庫

    Sophia的生命周期有兩個主要操作構成:分支和壓縮(Compaction)。當節點的內存Key索引大小達到一個特定的上線值時,或者全局內 存不足時,分支操作就會如期執行。當一些節點分支計數達到一個特定上線值時,壓縮操作就會以多線程模式如期執行。Sophia的所有后臺操作都由特定的計 劃任務(Scheduler)控制,它對讀操作進行了優化,最新創建的Branch(熱數據)會存儲在文件系統的緩存中。此外,Sophia還能夠高效地 利用可用內存以及具有硬盤和閃存友好特征。

    Sophia的當前最新版本是1.2.2版。Sophia的性能已經基于實際場景進行了基準測試,有興趣的讀者請查看測試的結果文檔。此外,官方還提供了各個版本的相關文檔,如API、例子、操作手冊等。

    來自:http://www.infoq.com/cn/news/2015/04/sophia-bsd-github

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!