当前位置: 首页 > news >正文

一个.net下的轻量级的Serverless 文档数据库LiteDB

今天发现了一个.net下的轻量级的Serverless 文档数据库LiteDB,感觉还不错

  • 官方网站: http://www.litedb.org/
  • 项目主页: https://github.com/mbdavid/LiteDB

其主要特点如下:

  • Serverless NoSQL 文档存储
  • 类似于 MongoDB 的简单 API
  • 100% C# 代码,支持.NET 3.5 / .NET 4.0 / NETStandard 1.3 / NETStandard 2.0,单 DLL (小于 300kb)
  • 支持线程和进程安全
  • 支持文档/操作级别的 ACID
  • 支持写失败后的数据还原 (日志模式)
  • 可使用 DES (AES) 加密算法进行数据文件加密
  • 可使用特性或 fluent 映射 API 将你的 POCO类映射为 BsonDocument
  • 可存储文件与流数据 (类似 MongoDB 的 GridFS)
  • 单数据文件存储 (类似 SQLite)
  • 支持基于文档字段索引的快速搜索 (每个集合支持多达16个索引)
  • 支持 LINQ 查询
  • Shell 命令行 - 试试这个在线版本
  • 相当快 - 这里是与 SQLite 的对比结果
  • 开源,对所有人免费 - 包括商业应用

简单的讲,它既具有Sqlite的轻便,也具有MongoDB的API友好的特点,作为一个轻量级的数据库使用是非常方便的。它的应用场景和Sqlite可以 说非常类似,用于桌面,移动环境以及一些小型,轻量级的Web应用上。

由于是单DLL应用,安装非常简单,一个Nuget命令就可以搞定: Install-Package LiteDB

官方的示例如下:

class Program
{
    static void Main(string[] args)
    {

        // Open database (or create if doesn't exist)
        using (var db = new LiteDatabase(@"test.db"))
        {
            // Get customer collection
            var col = db.GetCollection<Customer>("customers");

            // Create your new customer instance
            var customer = new Customer
            {
                Name = "John Doe",
                Phones = new string[] { "8000-0000""9000-0000" },
                Age = 39,
                IsActive = true
            };

            // Create unique index in Name field
            col.EnsureIndex(x => x.Nametrue);

            // Insert new customer document (Id will be auto-incremented)
            col.Insert(customer);

            // Update a document inside a collection
            customer.Name = "Joana Doe";

            col.Update(customer);

            // Use LINQ to query documents (with no index)
            var results = col.Find(x => x.Age > 20);
        }
    }
}

// Create your POCO class
public class Customer
{
    public int Id { getset; }
    public string Name { getset; }
    public int Age { getset; }
    public string[] Phones { getset; }
    public bool IsActive { getset; }
}

用起来和MongoDB非常类似,如果需要更多帮助可以参看官方的WIKI:https://github.com/mbdavid/LiteDB/wiki。也有人翻译了中文的版本i: https://github.com/lidanger/LiteDB.wiki_Translation_zh-cn/wiki

其作者在CodeProject上写了篇文章介绍的更加详细:LiteDB - A .NET NoSQL Document Store in a single data file。或者也可以参看一些其它人的应用体验:

  • http://www.debugrun.com/a/cN3DASh.html
  • http://www.voidcn.com/article/p-rqirwyrf-bmg.html
  • https://www.helplib.com/database/article_8020

我最开始是准备弄一个带一点检索功能的日志的,发现已经有人做了这个扩展:NLog.LiteDB ,只需要针对它开发一个查询功能就可以了。简单的看了一下它的功能,还是非常好用的,也可以用于图片之类的小文件存储,检索和读写的性能应该也还是非常给力的。很多地方感觉已经比Sqlite好用了,准备先小范围试用一下,如果可以的话准备将其应用到项目中去。

最后说一下其不足的地方,和Sqlite比起来,其第三方GUI工具要少得多,我在Nuget上找了一下,只找到了一个LiteDBViewer和LiteDbExplorer。不过有人写了一个LinqPad的驱动,可能要好用一些。

 

 

相关文章:

  • 微信小程序开发问题汇总
  • 基于我的Winform开发框架扩展而成的WCF开发框架
  • 「面试题」如何实现一个圣杯布局?
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • 预加载机制及变量提升
  • proguaid混淆maven工程问题总结
  • 图片编辑类
  • tcpdump
  • UGUI
  • mysql -- 优化之ICP(index condition pushdown)
  • 感恩送书第1期:2019年快来了,感谢各位网友,送《Spring 5开发大全》
  • 用工作单元(IUnitOfWork)带给我们的是什么?
  • EF架构~将数据库注释添加导入到模型实体类中
  • PHP生成随机字符串
  • JMeter接口测试中文乱码问题总结
  • @angular/forms 源码解析之双向绑定
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Android单元测试 - 几个重要问题
  • canvas 绘制双线技巧
  • C学习-枚举(九)
  • Docker: 容器互访的三种方式
  • gops —— Go 程序诊断分析工具
  • Gradle 5.0 正式版发布
  • Kibana配置logstash,报表一体化
  • MYSQL 的 IF 函数
  • Rancher-k8s加速安装文档
  • Shadow DOM 内部构造及如何构建独立组件
  • vagrant 添加本地 box 安装 laravel homestead
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 巧用 TypeScript (一)
  • 入口文件开始,分析Vue源码实现
  • 小程序01:wepy框架整合iview webapp UI
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 智能合约Solidity教程-事件和日志(一)
  • - 转 Ext2.0 form使用实例
  • 最近的计划
  • 数据库巡检项
  • ​2021半年盘点,不想你错过的重磅新书
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • $ git push -u origin master 推送到远程库出错
  • $.each()与$(selector).each()
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (C语言)共用体union的用法举例
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (转)setTimeout 和 setInterval 的区别
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • **CI中自动类加载的用法总结
  • . Flume面试题
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net 6.0 处理跨域的方式
  • .Net FrameWork总结
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?