在实际项目中使用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<T>.Skip(int).Take(int) 即可。經測試一般用戶輸入300kb的原始文件,會產生約 4Mb 的 json 數據,所以如果完整原始輸出是相當可怕的,所以默認會縮減輸出數據,即數據庫中仍然存入這個約 4 Mb 的對象,用戶請求詳細數據的時候只返回采樣后的部分記錄,比如 1000 條記錄,這樣輸出到接口 api 調用方大約 200 kb 數據,gzip 壓縮之后大概 ~70 kb,這對于前端來講是可接受的,也節約了服務器的輸出帶寬。
實際應用中,上線三天來數據庫增長到現在的 1.3 Gb,記錄約 200 條,目前查詢仍然是毫秒級別,這個數據庫不會作為持久存儲,只是為調用方臨時存儲數據,通常服務器會三天左右清除一次這個數據庫,目前 LiteDB 的表現是比較令人滿意的。
LiteDB 的使用很簡單:
下面是官網的一個例子:
// Basic examplepublic 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
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的在实际项目中使用LiteDB NoSQL数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员过关斩将--论商品促销代码的优雅性
- 下一篇: 初探奥尔良(Orleans)