一个.net下的轻量级的Serverless 文档数据库LiteDB
今天发现了一个.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。或者也可以参看一些其它人的应用体验:
- 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的驱动,可能要好用一些。
一个.net下的轻量级的Serverless 文档数据库LiteDB的更多相关文章
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(一)简介
关于实时流媒体传输的开源库,目前流行的主要有两个:live555和jrtplib. 其中live555将rtp.rtcp和rtsp的传输协议实现集于一身,功能齐全,是个超强的集合体.但是对于嵌入式系统 ...
- 一个windows下的ddos样本
一个windows下的ddos样本. 加载器 程序运行之后会在临时目录释放出一个256_res.tmp的文件 之后将该文件移动至system32目录下,以rasmedia.dll命名. 删除原文件. ...
- Cordova webapp实战开发:(6)如何写一个iOS下获取APP版本号的插件?
上一篇我们学习了如何写一个Andorid下自动更新的插件,我想还有一部分看本系列blog的开发人员希望学习在iOS下如何做插件的吧,那么今天你就可以来看看这篇文字了. 本次练习你能学到的 学习如何获取 ...
- Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?
在 <Cordova webapp实战开发:(4)Android环境搭建>中我们搭建好了开发环境,也给大家布置了调用插件的预习作业,做得如何了呢?今天我们来学一下如何自己从头建立一个And ...
- 推荐一个linux下的web压力测试工具神器webbench
推荐一个linux下的web压力测试工具神器webbench2014-04-30 09:35:29 来源: 评论:0 点击:880 用多了apache的ab工具之后你就会发现ab存在很多问题, ...
- vb.net 使用 Regex Replace 正则 替换 Html字串的table中tbody第一个tr下的td为th
本次示例效果如下: TextBox1中输入如下字符串: 12<table><tbody><tr><td>1<br/>11</td> ...
- Android系统,动态找出一个包下所有的类
最近在写一个android应用,由于针对不同机型功能很不同,为了隔离变化,希望将各项功能插件化,通过编译开关来控制不同版本的功能,而不是在代码中通过逻辑来判断. 我想了一个办法,用表驱动的方法,结合插 ...
- redis hash结构 遍历某一个key下所有的(field,values)的方法
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/95 redis的hash结构中存储了如下的数据: $input ...
- Java中获取本地某一个目录下的所有文件和文件夹
在从事web开发工作中,经常需要对本地某一个目录下的文件进行处理,而在这之前,我们需要做的就是获取到这个目录下的文件. String filepath = "D:\file";// ...
随机推荐
- Python subprocess- call、check_call、check_output
简介 subprocess模块用来创建新的进程,连接到其stdin.stdout.stderr管道并获取它们的返回码.subprocess模块的出现是为了替代如下旧模块及函数:os.system.os ...
- No.12 selenium for python 截屏
一.selenium for python 提供的几种截图方法 从上至下,很容易理解 1.as_file 获取当前window的截图,参数filename则表示截图的路径以及名称 出现IOError时 ...
- ViewPager中的子Activity无法响应OnActivityResult的解决方法
ViewPager子Activity通过startActivityForResult()跳转至OtherActivity,OtherActivity回传结果由ViewPager所在的父Activity ...
- Java 之 JDBC
mysql : //****** 四大金刚: 驱动类名.url.用户名.密码 //MySQL四大金刚 String driverClassname="com.mysql.jdbc.Drive ...
- WordCount_命令行运行时指定参数
WordCountApp命令行运行时指定参数 1.修改之前的WordCountApp.java的代码 package cmd; import java.net.URI; import org.apac ...
- too many open file /etc/security/limits.conf
当出现too mang open file 时更改/etc/profile中的ulimit -n 65536 ,查看 然后ssh进去,或者退出之后重新登录使之生效 ...
- Ubuntu16.04下Kylin的安装与配置
一.系统环境 kylin的安装配置并不像官方文档中描述的那样简单,复杂的原因在于hadoop,hive,hbase,kylin的版本一定要兼容,不然就会出现各种奇怪的错误.以下各软件版本可以成功运行k ...
- thinkphp数据查询方法总结select ,find,getField,query
thinkphp已经封装好了常用的查询方法,且都比较实用,对于不常用的查询框架也保留了原始查询方法query. 1 2 $Model = new Model() // 实例化一个model对象 没有对 ...
- poj2387- Til the Cows Come Home(最短路)
此为转载:http://blog.csdn.net/wangjian8006: 题目大意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离 解题思路: 模版题,这题要 ...
- UVa210 Concurrency Simulator (ACM/ICPC World Finals 1991) 双端队列
Programs executed concurrently on a uniprocessor system appear to be executed at the same time, but ...