一个.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_oldboy_自动化运维之路(三)
本节内容 列表,元组,字典 字符串操作 copy的用法 文件操作 1.列表,元组,字典 [列表] 1.定义列表 names = ['Alex',"Tenglan",'Eric'] ...
- JQuery中DOM事件合成用法
jQuery有两个合成事件——hover()方法和toggle()方法 类似前面讲过的ready()方法,hover()方法和toggle()方法都属于jQuery自定义的方法. hover()方法: ...
- CNN Architectures(AlexNet,VGG,GoogleNet,ResNet,DenseNet)
AlexNet (2012) The network had a very similar architecture as LeNet by Yann LeCun et al but was deep ...
- ASP .Net Core系统部署到SUSE 16 Linux Enterprise Server 12 SP2 64 具体方案
.Net Core 部署到 SUSE 16 Linux Enterprise Server 12 SP2 64 位中的步骤 1.安装工具 1.apache 2..Net Core(dotnet-sdk ...
- wpf 查找 子元素
RightContainer.ApplyTemplate();//如果找不到,就执行该句试一试 var xxx=UIHelper.FindChild<ScrollViewer>(Right ...
- Luogu P2069 【松鼠吃果子】
推荐一波数组模拟链表的讲解 这道题呢,数组写的话不好删除(因为后面要接过来),自然想到链表 对于一个果子,我们可以维护其前驱和后继,我们不妨记与一个点相邻的上面的点为其前驱,下面的点为其后继 观察到题 ...
- HTTPS、SPDY和HTTP/2的性能比较
http://www.infoq.com/cn/news/2015/02/https-spdy-http2-comparison/ https://segmentfault.com/a/1190000 ...
- USACO 4.2 Job Processing
Job ProcessingIOI'96 A factory is running a production line that requires two operations to be perfo ...
- 因为修改linux selinux修改错误产生的问题及解决办法
会出现这个错误: not syncing attempted to kill init 解决办法是: 开机后一直按e 然后按这个修改: https://www.deep-silver.com/kern ...
- PHP验证时有用的几段代码
1.htmlspecialchars() htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体.预定义的字符是: & (和号) 成为 & " ( ...