欢迎访问 生活随笔!

凯发ag旗舰厅登录网址下载

当前位置: 凯发ag旗舰厅登录网址下载 > 编程语言 > asp.net >内容正文

asp.net

.net平台开源项目速览(3)小巧轻量级nosql文件数据库litedb -凯发ag旗舰厅登录网址下载

发布时间:2025/1/21 asp.net 20 豆豆
凯发ag旗舰厅登录网址下载 收集整理的这篇文章主要介绍了 .net平台开源项目速览(3)小巧轻量级nosql文件数据库litedb 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

    今天给大家介绍一个不错的小巧轻量级的nosql文件数据库litedb。本博客在2013年也介绍过2款.net平台的开源数据库:

1.【原创】开源.net下的xml数据库介绍及入门 

2.【原创】c#开源轻量级对象数据库ndatabase介绍 

    上面2个数据库我的实际的项目中用过,还不错。当然数据量很小,主要是客户比较变态,必须要用xml文件保存,就想到了,另外ndatabase只是自己觉得好玩,也用了一下。

提示:没有x86,x64之分,可以anycpu使用。4.5版本也可以使用,如果需要专门的4.5版本,可以自己编译,另外mono的问题,官方没有提到,应该是暂时不支持,自己也没有环境,不好测试,希望有环境的朋友,可以用简单代码测试一下。

.net开源目录:【目录】本博客其他.net开源项目文章目录

 本文原文地址:.net平台开源项目速览(3)小巧轻量级nosql文件数据库litedb

1.1 基本功能预览

  litedb是一个小型的.net平台开源的nosql类型的轻量级文件数据库。特点是小和快,dll文件只有200k大小,而且支持linq和命令行操作,数据库是一个单一文件,类似sqlite。

  官方网站:http://www.litedb.org/

    主要特点有(翻译官方介绍,如有不准确,请指正):

1.nosql文件存储。这是和传统关系型数据库的主要区别;支持实体类的字段更新;
2.类似mongodb的简单api;
3.完全使用c#代码,在.net 4.0环境下编写,核心dll小巧,只有168k;
4.支持acid事务处理;
5.可以进行写入失败的恢复;
6.存储到文件或者数据流中(类似mongodb的gridfs);
7.类似sqlite的单一文件存储;
8.支持文件索引,可以进行快速搜索;可以直接存储文件;

9.支持linq查询;【这也许是c#编写最直接的好处】;
10.支持命令行操作数据库,官方提供了一个shell command line;
11.完全开源和免费,包括商业使用;

1.2 使用场景

  虽然小巧,但也不是万能的,litedb给出了几个可能或者比较适合使用的场景。大家可以根据实际情况进行或者根据需要进行测试,看是不是自己需要的: 

1.桌面或者本地小型的应用程序
2.小型web应用程序
3.单个数据库账户或者单个用户数据的存储
4.少量用户的并发写操作的应用程序

    上面只是基本介绍,先从搞一个简单的案例介绍如何使用。大家可以感觉一下。如果要具体使用,就好好研究下官方的文件。本文下面几节也将大概介绍一下litedb的相关原理和技术细节。有空我会做一个大数据下的测试,看看如何。这里只是为了介绍给大家研究而已。

2.1 创建实体类

    为了例子需要,我们创建一个简单的实体类,如下面所示,只包括几个基本的属性信息。

public class customer {public int id { get; set; }public string name { get; set; }public string[] phones { get; set; }public bool isactive { get; set; } }

2.2 使用demo

    使用过程首先要添加dll应用,以及引入命名空间:

using litedb;

    下面是测试代码,会在当前目录下创建一个sample.db的数据库文件:

//打开或者创建新的数据库 using (var db = new litedatabase("sample.db")) {//获取 customers 集合,如果没有会创建,相当于表var col = db.getcollection("customers");//创建 customers 实例var customer = new customer{name = "john doe",phones = new string[] { "8000-0000", "9000-0000" },isactive = true};// 将新的对象插入到数据表中,id是自增,自动生成的col.insert(customer);// 更新实例customer.name = "joana doe";//保存到数据库col.update(customer);// 使用对象的属性,这个方法生成索引,来进行检索col.ensureindex(x => x.name);//使用linq语法来检索var results = col.find(x => x.name.startswith("jo")); }

    上述过程很清楚,根据注释理解几乎不用费神。

  例子的使用简单,但其实还不够全面,本节就稍微翻译一下litedb官方提供的一些技术资料和文档。让你对litedb更加了解和易于使用。

3.1.litedb的工作原理

  本节翻译自:https://github.com/mbdavid/litedb/wiki/how-litedb-works

  litedb是虽然单个文件类型的数据库,但是数据库有很多信息,例如索引,集合,文件等。为了管理这些信息,litedb实现了数据库页的概念。页 是一个拥有4096 字节的 存储相同信息的地址块。页 也是操作磁盘文件(读写)的最小单元。litedb有6种页类型。其作用也不一样,分布是:header page,collection page,index page, data page,extend page,empty page。鉴于篇幅较大,这里只介绍重要的data page。其他几个页面的作用看文件也很容易。data page的作用是存储核心的数据,是以序列化后的bson格式来存储。值得注意的是,如果存储的数据太大,超过page大小,数据块就会使用一个指针指向extend page。

  在上面的代码中,我们初始化数据库是这样的:

var db = new litedatabase("mydata.db");

  这种情况比较好用,可以打开或者创建新的数据库,同样也可以使用连接名称来获取,例如:

var db = new litedatabase("userdb");

  这样会直接从connectionstrings找到这个名称的连接。包括了文件名称,使用模式,以及版本信息。一般情况下直接使用第一种即可。

  litedb的数据库连接完整形式是:filename=c:\path\mydb.db; journal=false; version=5

3.2 litedb的查询

  本节翻译自:https://github.com/mbdavid/litedb/wiki/queries

  litedb的查询必须在相关的查询字段上使用索引,如果没有索引,会默认去创建索引。上面例子中就是创建字段的索引,并查询。litedb中查询有2种方法:

1.使用静态的帮助类query;

2.使用linq方式,就是类似demo的方法;

  litedb使用query的查询方式有以下一些方法,详细讲解几个重要的,其他几个大家理解一下,也应该不难,如果有不准确的地方,还请指正: 

query.all 返回所有的数据,可以使用指定的索引字段进行排序
query.eq 查找返回和指定字段值相等的数据
query.lt/lte 查找< 或 <= 某个值的数据
query.gt/gte 查找> 或 >= 某个值的数据
query.between 查找在指定区间范围内的数据
query.in - 和sql的in类似吧,查找和列表中值相等的数据
query.not - 和eq相反,是不等于某个值的数据
query.startswith 查找以某个字符串开头的数据
query.contains 查找保护某个字符串的数据,这个查询只扫描索引
query.and 2个查询的交集
query.or 2个查询结果的并集

  看看实际代码:

var results = collection.find(query.eq("name", "john doe")); var results = collection.find(query.gte("age", 25)); var results = collection.find(query.and(query.eq("firstname", "john"), query.eq("lastname", "doe") )); var results = collection.find(query.startswith("name", "jo"));

  如图,语法是左边是字段,右边是值。注意litedb不支持这种表达式:creationdate == duedate。

  下面介绍使用linq的查询的几个主要方法:

findall: 查找表或者集合中所有的结果记录

findone:返回第一个或者默认的结果
findbyid: 通过索引返回单个结果
find: 使用查询表达式或者linq表达式查询返回结果

   看看几个例子:

collection.ensureindex(x => x.name); var result = collection.find(query.eq("name", "john doe")) .where(x => x.creationdate >= x.duedate.adddays(-5)) .orderby(x => x.age).select(x => new { fullname = x.firstname " " x.lastname, duedays = x.duedate - x.creationdate });

   当然还有一些方法如:count() , exists(),min() , max()等方法。。比较好理解。看看linq表达式的查询案例:

var collection = db.getcollection("customer"); var results = collection.find(x => x.name == "john doe"); var results = collection.find(x => x.age > 30); var results = collection.find(x => x.name.startswith("john") && x.age > 30);

  litedb的介绍就基本完成了,实际还有很多技术细节在官方文档中。比较简单也好理解,不再翻译。这里提供一个2015年5月25日下载的源码版本和例子源代码。

  源代码和demo下载 1.0.2:litedb-1.02.rar

  同样,官方没有提供离线版的chm文档,我手动制作了一份,提供下载,如下图:

特别提醒:帮助文件chm打开显示不了请右键,属性,解除锁定。。。路径,文件名都不能含有特殊字符,否则也不能打开。。常见问题,有网友问起,提醒一下。

  帮助文档下载地址:csharp数据库litedb帮助文档.rar 

总结

以上是凯发ag旗舰厅登录网址下载为你收集整理的.net平台开源项目速览(3)小巧轻量级nosql文件数据库litedb的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。

网站地图