歡迎光臨
每天分享高質量文章

在實際專案中使用LiteDB NoSQL資料庫

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

赞(0)

分享創造快樂