今天发现了一个.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. js中的盒子模型

    说到盒子模型,你第一时间会想到css盒子模型,css中的盒子模型包括(内容区+内边距+边框).那在js中怎么去获取这些属性值呢?下面一起来学习js中的盒子模型. css样式 body { margin ...

  2. Jackson jsonToBean 忽略 Bean中不存在属性的匹配。

    1. jsonToBean时,json中有的字段,bean中没有 无法匹配时,忽略此字段,不抛出异常(默认是抛出异常的) 方案一(局部):在class上加 @JsonIgnoreProperties( ...

  3. POJ 3286 How many 0's(数位DP模板)

    题目链接:http://poj.org/problem?id=3286 题目大意: 输入n,m,求[n,m]的所有数字中,0出现的总数是多少,前导零不算. 解题思路: 模板题,设dp[pos][num ...

  4. HDU 1068 Girls and Boys(最大独立集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1068 题目大意:有n个人,一些人认识另外一些人,选取一个集合,使得集合里的每个人都互相不认识,求该集合 ...

  5. HBase混布MapReduce集群学习记录

    一.准备工作 1.1 部署环境 集群规模大概260多台,TSC10机型,机型参数如下: > 1个8核CPU(E5-2620v4) > 64G内存 > HBA,12*4T SATA,1 ...

  6. HTML5练习1

    制作简历 主要代码: <!doctype html> <html> <head> <meta charset="utf-8"> &l ...

  7. CCF CSP 201403-4 无线网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-4 无线网络 问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路 ...

  8. day6面向对象--继承、多态

    继承     继承:就像遗传一样,继承就是拥有父类的所有方法和属性,并且能够定义自己独特的属性和方法,对上面的类进行扩展. 可以什么都不写,直接继承父类,如下: class People(object ...

  9. 【LOJ】#2061. 「HAOI2016」放棋子

    题解 水题,可惜要写高精度有点烦 一看障碍物的摆放方式和最后的答案没有关系,于是干脆不读了,直接二项式反演可以得到 设\(g_k\)为一种摆放方式恰好占了k个障碍物 \(f_k = \sum_{i = ...

  10. 【LOJ】#2443. 「NOI2011」智能车比赛

    题解 显然是个\(n^2\)的dp 我们要找每个点不穿过非赛道区域能到达哪些区域的交点 可以通过控制两条向量负责最靠下的上边界,和最靠上的下边界,检查当前点在不在这两条向量之间即可,对于每个点可以\( ...