博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LiteDB源码解析系列(1)LiteDB介绍
阅读量:4512 次
发布时间:2019-06-08

本文共 1698 字,大约阅读时间需要 5 分钟。

最近利用端午假期,我把LiteDB的源码仔细的阅读了一遍,酣畅淋漓,确实收获了不少。后面将编写一系列关于LteDB的文章分享给大家,希望这么好的源码不要被埋没。

1.LiteDB是什么

这是一个小型的.NET平台开源的NoSQL类型的轻量级文件数据库。特点是小和快,由于完全由C#'编写,所以可以支持LINQ,创建数据库是一个单一文件,类似Sqlite。

关于它的中文介绍大家可以看一下.net前辈-数据之巅的博客:

中文网站:

主要特点有:

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.完全开源和免费,包括商业使用;

我主要阅读的源码是0.0.8版本,这个版本是LiteDB最初版本。该版本虽然存在一些bug,但相对于后面的版本,该版本技术实现的很简单粗暴,入手比较快。后面分析的细节也是根据0.0.8版本进行的。

2.LiteDB源码文件结构

这里贴一张0.0.8版本的项目结构图:

Document:LiteDB序列化到硬盘使用的是一种叫Bson格式的数据,顾名思义bson类似于json只不过将数据序列化成byte数组,在Document模块中定义了Bson的类、数组、数据类型等。

Engine:这个模块里就是与用户交互最多的LiteEngine类(后面的版本改名叫LiteDatabase)和LiteCollection类,LiteEngine对用户提供了创建或打开数据库的接口,LiteCollection是用来对单张表做增删改查操作,我们看源码,可以从这两个类作为突破点。

Query:这个模块提供了数据库对于Linq的支持,用户使用lambda表达式,在这个模块中的QueryVisitor类中被解析成一系列表达式比如:and、or、between、less等等。

Serializer:这个模块就提供了对于不同类型的数据进行Bson序列化,0.0.8版本使用了这个开源组件,后面的版本不再使用。

Shell:这个模块为数据库提供了脚本支持。

Storage:这个文件夹里包括了整个LiteDB里最核心的三个实现模块即Pages、Structures、Services。

Pages:定义了数据库页:Header Page,Collection Page,Index Page, Data Page,Extend Page。

Structures:定义了CollectionIndex(表索引)、DataBlock(数据块)、PageAddress(页地址)、IndexKey(索引键)和IndexNode(索引节点)五个数据结构。

Services:包括了数据库对缓存、硬盘读写、索引查询、数据页的增删改查操作、回滚操作等功能的实现。

Utils:这个就是一些公用的工具类和异常定义。

3.后续介绍

后面的系列我将着重讲解以下几个部分:

1.LiteDB中关于页的概念,CollectionIndex、DataBlock和IndexNode这几个数据结构的作用。

2.Query模块如何实现linq功能,顺便试着解答博主数据之巅在博客中提出的关于分页的疑问。

3.LiteDB如何使用索引查询的,对比Mysql的索引方式,将LiteDB的跳表索引用可视化的方式展示出来。

这是我第一次用博客的形式解析源码,如果有纰漏,还望多指正。

 

转载于:https://www.cnblogs.com/xiaozhangStudent/p/11012060.html

你可能感兴趣的文章
谷歌Chrome浏览器如何设置网页的默认编码方法
查看>>
ZOJ-1129-Erdos Numbers
查看>>
java学习第四天 类和变量
查看>>
IDEA中如何添加RunDashboard
查看>>
单例静态继承
查看>>
Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.2——设置Flavors和Variants...
查看>>
Android零基础入门第36节:Android系统事件的响应
查看>>
POJ 2262 Goldbach's Conjecture
查看>>
自己手动写代码实现数据库连接池
查看>>
领域对象驱动开发:来吧,让我们从对象开始吧
查看>>
mysql分区分表讲解
查看>>
java编程思想读书笔记三(11-21)
查看>>
luogu P5302 [GXOI/GZOI2019]特技飞行
查看>>
EntityFramework 开始小试
查看>>
234 Palindrome Linked List
查看>>
Keil-MDK编译完成后代码大小
查看>>
ArcGIS JS 学习笔记4 实现地图联动
查看>>
6.3确认网站色调-主色辅色背景色
查看>>
CSS Hack技术介绍及常用的Hack技巧
查看>>
【精解】EOS智能合约演练
查看>>