今天发现了一个.net下的轻量级的Serverless 文档数据库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.Name, true);

// 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 { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string[] Phones { get; set; }
    public bool IsActive { get; set; }
}

用起来和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。或者也可以参看一些其它人的应用体验:

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

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

一个.net下的轻量级的Serverless 文档数据库LiteDB的更多相关文章

  1. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(一)简介

    关于实时流媒体传输的开源库,目前流行的主要有两个:live555和jrtplib. 其中live555将rtp.rtcp和rtsp的传输协议实现集于一身,功能齐全,是个超强的集合体.但是对于嵌入式系统 ...

  2. 一个windows下的ddos样本

    一个windows下的ddos样本. 加载器 程序运行之后会在临时目录释放出一个256_res.tmp的文件 之后将该文件移动至system32目录下,以rasmedia.dll命名. 删除原文件. ...

  3. Cordova webapp实战开发:(6)如何写一个iOS下获取APP版本号的插件?

    上一篇我们学习了如何写一个Andorid下自动更新的插件,我想还有一部分看本系列blog的开发人员希望学习在iOS下如何做插件的吧,那么今天你就可以来看看这篇文字了. 本次练习你能学到的 学习如何获取 ...

  4. Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?

    在 <Cordova webapp实战开发:(4)Android环境搭建>中我们搭建好了开发环境,也给大家布置了调用插件的预习作业,做得如何了呢?今天我们来学一下如何自己从头建立一个And ...

  5. 推荐一个linux下的web压力测试工具神器webbench

    推荐一个linux下的web压力测试工具神器webbench2014-04-30 09:35:29   来源:   评论:0 点击:880 用多了apache的ab工具之后你就会发现ab存在很多问题, ...

  6. vb.net 使用 Regex Replace 正则 替换 Html字串的table中tbody第一个tr下的td为th

    本次示例效果如下: TextBox1中输入如下字符串: 12<table><tbody><tr><td>1<br/>11</td> ...

  7. Android系统,动态找出一个包下所有的类

    最近在写一个android应用,由于针对不同机型功能很不同,为了隔离变化,希望将各项功能插件化,通过编译开关来控制不同版本的功能,而不是在代码中通过逻辑来判断. 我想了一个办法,用表驱动的方法,结合插 ...

  8. redis hash结构 遍历某一个key下所有的(field,values)的方法

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/95 redis的hash结构中存储了如下的数据: $input ...

  9. Java中获取本地某一个目录下的所有文件和文件夹

    在从事web开发工作中,经常需要对本地某一个目录下的文件进行处理,而在这之前,我们需要做的就是获取到这个目录下的文件. String filepath = "D:\file";// ...

随机推荐

  1. ArcMap2SLD添加中文支持

    首先,你可以从作者提供的链接下载ArcMap2SLD.zip(支持ArcMap10.2) 1.打开LUT_sld_mapping_file.xml文件(上传文件中已经修改)修改文件<LUT> ...

  2. jpql和sql的区别

    项目使用jpa规范 其中既可使用面对对象查询(jpql语句) 又可使用原生sql查询; 1.(经后期验证,jpql都可以) 其中有一个区别是: jpql查询字段为空:  " cr.owner ...

  3. 洛谷P1195口袋的天空

    传送门啦 一个裸的最小生成树,输出 $ No Answer $ 的情况只有 $ k < n $ 的时候. 开始令 $ num =n $ ,如果 $ num = k $ ,直接输出 $ 0 $ , ...

  4. 一步步教你编写不可维护的 PHP 代码

    译者注:这是一篇很棒文章,使用有趣的叙述方式,从反面讲解了作为一个优秀的 PHP 工程师,有哪些事情是你不能做的.请注意哦,此篇文章罗列的行为,都是你要尽量避免的. 随着失业率越来越高,很多人意识到保 ...

  5. MySQL学习笔记:新增一列

    1.在一个已建好的表中,最后一列位置添加一列,可使用: ALTER TABLE aa_numbers_small ADD COLUMN date_time DATE NOT NULL; 2.添加一列到 ...

  6. CF 586A 找1的个数和101的个数

    Sample test(s) input 50 1 0 1 1 output 4 input 71 0 1 0 0 1 0 output 4 input 10 output 0 # include & ...

  7. #Git 详细中文安装教程

    Step 1 Information 信息 Please read the following important information before continuing 继续之前,请阅读以下重要 ...

  8. ASP.NET WebAPI 01-Demo

    WebAPI作为构建RESTful的平台出来有段时间了,加上最近也在用,所以想把自己的心得记录下来.我就以一个简单的增删查改作为开篇. 准备 实体类(Figure)的定义. public class ...

  9. ASP.NET:MVC模板化机制

    模版化的核心是定制ViewEngine.完整的模板化必须实现3个功能:1.网站的多套模版(razor)支持 2.模版的多样式(style)支持. 3.按需实现模版:没有实现的加载默认模版. 我们除了要 ...

  10. MVC图片上传并显示缩略图

    前面已经说了怎么通过MVC来上传文件,那么这次就说说如何上传图片然后显示缩略图,这个的实用性还是比较大.用UpLoad文件夹来保存上传的图片,而Temp文件夹来保存缩略图,前面文件上传部分就不再重复了 ...