LiteDB 是一個 NoSQL 資料庫,特點是 MongoDB like 和 0 配置。100% 原汁原味的 C# 開發, Release 只有一個 DLL,官方有一下適用場景:移動App,桌面小應用程式,特有的檔案格式,小型的 Web 應用,需要為每一個使用者建立資料庫的應用。最重要的是它支援事務和LinQ和日誌,對於商業應用也是免費的。
這次在一個對外開放介面中使用了LiteDB,這個對外介面提供一個檔案解析服務,會傳回給使用者Json格式的解析結果,使用者透過介面以Post方式提交檔案,等待解析完成後會傳回給使用者一個id和摘要資料,使用者透過傳回的id可以去獲取解析的最終詳細資料。這中間透過 LiteBD 儲存瞭解析結果的物件和上傳檔案的雜湊值,用於防止重覆上傳造成不必要的計算資源的浪費。
這個儲存關鍵的是儲存瞭解析的最終物件而不是json字串,這麼做的好處是,使用者在請求詳細結果時可以設定引數需要詳細資料的詳細程度,比方說只需要解析結果的頭10條,取樣的100條,這些都可以在傳回時候處理,而且使用 LinQ 處理起來也很簡單,List.Skip(int).Take(int) 即可。經測試一般使用者輸入300kb的原始檔案,會產生約 4Mb 的 json 資料,所以如果完整原始輸出是相當可怕的,所以預設會縮減輸出資料,即資料庫中仍然存入這個約 4 Mb 的物件,使用者請求詳細資料的時候只傳回採樣後的部分記錄,比如 1000 條記錄,這樣輸出到介面 api 呼叫方大約 200 kb 資料,gzip 壓縮之後大概 ~70 kb,這對於前端來講是可接受的,也節約了伺服器的輸出頻寬。
實際應用中,上線三天來資料庫增長到現在的 1.3 Gb,記錄約 200 條,目前查詢仍然是毫秒級別,這個資料庫不會作為持久儲存,只是為呼叫方臨時儲存資料,通常伺服器會三天左右清除一次這個資料庫,目前 LiteDB 的表現是比較令人滿意的。
LiteDB 的使用很簡單:
下麵是官網的一個例子:
// Basic example public class Customer { public int Id { get; set; } public string Name { get; set; } public string[] Phones { get; set; } public bool IsActive { get; set; } } // Open database (or create if not exits) using(var db = new LiteDatabase(@"MyData.db")) { // Get customer collection var customers = db.GetCollection("customers"); // Create your new customer instance var customer = new Customer { Name = "John Doe", Phones = new string[] { "8000-0000", "9000-0000" }, IsActive = true }; // Insert new customer document (Id will be auto-incremented) customers.Insert(customer); // Update a document inside a collection customer.Name = "Joana Doe"; customers.Update(customer); // Index document using a document property customers.EnsureIndex(x => x.Name); // Use Linq to query documents var results = customers.Find(x => x.Name.StartsWith("Jo")); }
LiteDB 的資料庫檔案頭部有個幾位元組表示資料庫型別,預設就是 LiteDB,如果需要自己定義,可以在原始碼 HeaderPage.cs 中修改 HEADER_INFO 常量。忘了說,LiteDB 還可以儲存檔案,這個配合 HEADER_INFO 使用,可以號稱自己發明瞭一種新型檔案格式了…
原文地址:https://www.cnblogs.com/yahch/p/5980738.html