无国界 發表於 2024-1-10 08:00:00

一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库

<h2 data-tool="mdnice编辑器">前言</h2>
<p data-tool="mdnice编辑器">今天给大家分享一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库:LiteDB。本篇文章主要是介绍LiteDB和在.NET中如何使用。</p>
<h2 data-tool="mdnice编辑器">LiteDB介绍</h2>
<p data-tool="mdnice编辑器"><strong>LiteDB 是一个小巧、快速和轻量级的 .NET NoSQL 嵌入式数据库。</strong></p>
<ul class="list-paddingleft-1" data-tool="mdnice编辑器">
<li>无服务器的 NoSQL 文档存储</li>
<li>简单的 API,类似于 MongoDB</li>
<li>100% 的 C# 代码支持 .NET 4.5 / NETStandard 1.3/2.0,以单个 DLL(不到 450KB)形式提供</li>
<li>线程安全</li>
<li>支持 ACID,完整的事务支持</li>
<li>写入失败后的数据恢复(WAL 日志文件)</li>
<li>使用 DES(AES)加密算法对数据文件进行加密</li>
<li>使用属性或流畅的映射器 API 将 POCO 类映射为 BsonDocument</li>
<li>存储文件和流数据(类似于 MongoDB 的 GridFS)</li>
<li>单一数据文件存储(类似于 SQLite)</li>
<li>对文档字段建立索引以实现快速搜索</li>
<li>支持 LINQ 查询</li>
<li>提供类似于 SQL 的命令来访问/转换数据</li>
<li>LiteDB Studio - 数据访问的精美用户界面</li>
<li>开源且免费供所有人使用,包括商业用途</li>
</ul>
<h2 data-tool="mdnice编辑器">LiteDB应用场景</h2>
<p data-tool="mdnice编辑器"><strong>可以在以下场景中使用 LiteDB:</strong></p>
<ul class="list-paddingleft-1" data-tool="mdnice编辑器">
<li>桌面/本地小型应用程序</li>
<li>应用程序文件格式</li>
<li>小型网站/应用程序</li>
<li>每个账户/用户数据存储一个数据库的情况</li>
</ul>
<h2 data-tool="mdnice编辑器">LiteDB项目源代码</h2>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202401/1336199-20240109233900567-175048583.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">创建一个LiteDBCwTest控制台</h2>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202401/1336199-20240109233914138-1041282677.png" alt="" loading="lazy"></p>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202401/1336199-20240109233919361-2044784296.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">安装LiteDB包</h2>
<p data-tool="mdnice编辑器">搜索<code>LiteDB</code>包,点击安装。</p>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202401/1336199-20240109233955318-1140297132.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">定义Customer数据模型</h2>
<pre data-tool="mdnice编辑器"><code>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;Customer<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;Id<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;Id&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;Name<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Name&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;Age<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;Age&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;Email<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Email&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br></code></pre>
<h2 data-tool="mdnice编辑器">LiteDB数据创建、插入、查询和删除</h2>
<pre data-tool="mdnice编辑器"><code>namespace&nbsp;LiteDBCwTest<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;internal&nbsp;class&nbsp;Program<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//创建或打开数据库文件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(var&nbsp;db&nbsp;=&nbsp;new&nbsp;LiteDatabase(@"MyCustomerData.db"))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;获取集合(相当于表)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;collection&nbsp;=&nbsp;db.GetCollection&lt;Customer&gt;("customers");<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;customers&nbsp;=&nbsp;new&nbsp;List&lt;Customer&gt;()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Customer<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;=&nbsp;"追逐时光者",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Age&nbsp;=&nbsp;18,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Email&nbsp;=&nbsp;"17854545@gmail.com"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Customer<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;=&nbsp;"大姚",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Age&nbsp;=&nbsp;30,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Email&nbsp;=&nbsp;"16556545@gmail.com"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;批量插入数据<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collection.Insert(customers);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;查询数据<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;collection.FindAll();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(var&nbsp;c&nbsp;in&nbsp;result)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine($"Name:&nbsp;{c.Name},&nbsp;Age:&nbsp;{c.Age},&nbsp;Email:&nbsp;{c.Email}");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;根据条件查询数据<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;query&nbsp;=&nbsp;Query.EQ("Age",&nbsp;30);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;resultByAge&nbsp;=&nbsp;collection.Find(query);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(var&nbsp;c&nbsp;in&nbsp;resultByAge)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine($"Name:&nbsp;{c.Name},&nbsp;Age:&nbsp;{c.Age},&nbsp;Email:&nbsp;{c.Email}");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;删除数据<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;deletedResult&nbsp;=&nbsp;collection.Delete(resultByAge.FirstOrDefault().Id);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></code></pre>
<h3 data-tool="mdnice编辑器">创建成功的数据库文件</h3>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202401/1336199-20240109234021349-322901108.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">LiteDB.Studio管理工具下载</h2>
<ul class="list-paddingleft-1" data-tool="mdnice编辑器">
<li>https://github.com/mbdavid/LiteDB.Studio/releases</li>
</ul>
<blockquote data-tool="mdnice编辑器">
<p>用于查看和编辑 LiteDB v5 文档的图形用户界面工具。</p>
</blockquote>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202401/1336199-20240109234047699-1632071504.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">LiteDB.Studio管理数据</h2>
<h3 data-tool="mdnice编辑器">连接MyCustomerData数据库</h3>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202401/1336199-20240109234149301-2142167517.png" alt="" loading="lazy"></p>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202401/1336199-20240109234154178-2039133383.png" alt="" loading="lazy"></p>
<h3 data-tool="mdnice编辑器">查看customers表数据</h3>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202401/1336199-20240109234208290-1939384276.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">项目源码地址</h2>
<p data-tool="mdnice编辑器"><strong>更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。</strong></p>
<blockquote>
<p>GitHub源码地址:https://github.com/mbdavid/LiteDB</p>
<p>官方文档地址:https://www.litedb.org/api/</p>
</blockquote>
<h2 data-tool="mdnice编辑器">优秀项目和框架精选</h2>
<p data-tool="mdnice编辑器">该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(<code>让优秀的项目和框架不被埋没🤞</code>)。</p>
<blockquote>
<p>https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md</p>
</blockquote>
<h2 id="activity-name" class="rich_media_title ">DotNetGuide技术社区交流群</h2>
<ul>
<li>DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。</li>
<li>在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。</li>
<li>我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。</li>
</ul>
<blockquote>
<p id="activity-name" class="rich_media_title "><strong>欢迎加入DotNetGuide技术社区微信交流群👪</strong></p>
</blockquote>

</div>
<div id="MySignature" role="contentinfo">
    <blockquote >
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者名称:</span>追逐时光者</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者简介:</span>一个热爱编程、善于分享、喜欢学习、探索、尝试新事物和新技术的全栈软件工程师。</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【&hearts;推荐&hearts;】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确的地方,欢迎指正或补充,不胜感激。
</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/Can-daydayup/p/17955585
頁: [1]
查看完整版本: 一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库