日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

在实际项目中使用LiteDB NoSQL数据库

發(fā)布時間:2023/12/4 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在实际项目中使用LiteDB NoSQL数据库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

LiteDB 是一個 NoSQL 數(shù)據(jù)庫,特點是 MongoDB like 和 0 配置。100% 原汁原味的 C# 開發(fā), Release 只有一個 DLL,官方有一下適用場景:移動App,桌面小應用程序,特有的文件格式,小型的 Web 應用,需要為每一個用戶建立數(shù)據(jù)庫的應用。最重要的是它支持事務和LinQ和日志,對于商業(yè)應用也是免費的。

這次在一個對外開放接口中使用了LiteDB,這個對外接口提供一個文件解析服務,會返回給用戶Json格式的解析結(jié)果,用戶通過接口以Post方式提交文件,等待解析完成后會返回給用戶一個id和摘要數(shù)據(jù),用戶通過返回的id可以去獲取解析的最終詳細數(shù)據(jù)。這中間通過 LiteBD 存儲了解析結(jié)果的對象和上傳文件的哈希值,用于防止重復上傳造成不必要的計算資源的浪費。

這個存儲關(guān)鍵的是存儲了解析的最終對象而不是json字符串,這么做的好處是,用戶在請求詳細結(jié)果時可以設定參數(shù)需要詳細數(shù)據(jù)的詳細程度,比方說只需要解析結(jié)果的頭10條,采樣的100條,這些都可以在返回時候處理,而且使用 LinQ 處理起來也很簡單,List<T>.Skip(int).Take(int) 即可。經(jīng)測試一般用戶輸入300kb的原始文件,會產(chǎn)生約 4Mb 的 json 數(shù)據(jù),所以如果完整原始輸出是相當可怕的,所以默認會縮減輸出數(shù)據(jù),即數(shù)據(jù)庫中仍然存入這個約 4 Mb 的對象,用戶請求詳細數(shù)據(jù)的時候只返回采樣后的部分記錄,比如 1000 條記錄,這樣輸出到接口 api 調(diào)用方大約 200 kb 數(shù)據(jù),gzip 壓縮之后大概 ~70 kb,這對于前端來講是可接受的,也節(jié)約了服務器的輸出帶寬。

實際應用中,上線三天來數(shù)據(jù)庫增長到現(xiàn)在的 1.3 Gb,記錄約 200 條,目前查詢?nèi)匀皇呛撩爰墑e,這個數(shù)據(jù)庫不會作為持久存儲,只是為調(diào)用方臨時存儲數(shù)據(jù),通常服務器會三天左右清除一次這個數(shù)據(jù)庫,目前 LiteDB 的表現(xiàn)是比較令人滿意的。

LiteDB 的使用很簡單:

下面是官網(wǎng)的一個例子:

// 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 的數(shù)據(jù)庫文件頭部有個幾字節(jié)表示數(shù)據(jù)庫類型,默認就是 LiteDB,如果需要自己定義,可以在源代碼 HeaderPage.cs 中修改 HEADER_INFO 常量。忘了說,LiteDB 還可以存儲文件,這個配合 HEADER_INFO 使用,可以號稱自己發(fā)明了一種新型文件格式了...

原文地址:https://www.cnblogs.com/yahch/p/5980738.html

.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的在实际项目中使用LiteDB NoSQL数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。