一千萬個為什麽

搜索

簡單的批量數據持久性框架

是否存在用於批量數據持久性的ACID框架,這也允許一些基本的搜索功能?我正在尋找一個完整的DBMS,而是快速,輕松和簡單的東西。即使只是處理原子提交的東西也會很棒,只是為了避免在電源故障的情況下重新發明這種情況。

SQL Server對此來說太慢而且開銷太大,SQLite甚至更慢(開銷可能更少?)。

基本上,我需要每秒存儲大量的timetamped數據。作為標準化數據,這將對應於~10k表行,但作為二進制數據,它可以使用~200kb表示。顯然,與向關系數據庫寫入10k行相比,將200kb寫入磁盤是件小事。

我可以簡單地將它保存在一個或多個大型二進制文件中,然後實現我自己的一些索引以允許對某些字段進行快速過濾,但唯一令我害怕的是非原子事務和讀/寫鎖定方案。

有什麽建議?我正在使用C#btw,所以使用.NET包裝器的任何東西都是首選。

[Edit] Regarding ACID, I just found this, for example: Managed wrapper for Transactional NTFS (although TxF is a "Vista and later" feature).

最佳答案

傳統的基於SQL的存儲將提供ACID,但許多的批量更新將會很慢。從另一方面來說,NoSQL解決方案/鍵值存儲通常不會為您提供可靠的事務,或者通過某種方式無縫地索引,以便通過其他方式進行快速查找,而不僅僅是單個鍵。所以我們需要結合兩種方法的好處的東西。

我會考慮使用CouchDB(NoSQL map/reduce基於文檔的數據庫與RESTful API)並采用以下策略:CouchDB沒有原子地保存多個文檔的事務,但是當它保存單個文檔時 - 它是超級可靠和原子,也允許多版本並發控制。

因此,如果您有10000條記錄數據,每個大約200-300 kB,您可以將其保存為單個文檔。這聽起來可能很奇怪,但問題是你可以在文檔集上構建視圖,這些集合實際上是增量索引。一個文檔可能會產生多個視圖結果。視圖是用javascript編寫的(在文檔創建/更新時只評估一次),因此您可以根據需要對其進行索引 - 通過關鍵字,數值,日期 - 幾乎可以使用javascript執行任何操作。獲取視圖結果非常快,因為它們被預先索引到B + -tree中。

這種方法的好處:

  • CouchDB使用基於HTTP的JSON作為其數據傳輸協議,因此您可以使用任何HTTP客戶端或REST客戶端或本機C#包裝器(有幾種可用的)
  • 您的200 kB文檔的批量插入將是原子的並且只需要一個HTTP請求
  • 您的插入將是異步的,因為它只是一個HTTP。
  • 你將擁有MVCC - CouchDB非常善於並發,所以你會忘記任何鎖或smth。

給它一個機會 - 它為我節省了大量時間。

轉載註明原文: 簡單的批量數據持久性框架