LiteDB 是一个 NoSQL 数据库,特点是 MongoDB like 和 0 配置。100% 原汁原味的 C# 开发, Release 只有一个 DLL,官方有一下适用场景:移动App,桌面小应用程序,特有的文件格式,小型的 Web 应用,需要为每一个用户建立数据库的应用。最重要的是它支持事务和LinQ和日志,对于商业应用也是免费的。

这次在一个对外开放接口中使用了LiteDB,这个对外接口提供一个文件解析服务,会返回给用户Json格式的解析结果,用户通过接口以Post方式提交文件,等待解析完成后会返回给用户一个id和摘要数据,用户通过返回的id可以去获取解析的最终详细数据。这中间通过 LiteBD 存储了解析结果的对象和上传文件的哈希值,用于防止重复上传造成不必要的计算资源的浪费。

这个存储关键的是存储了解析的最终对象而不是json字符串,这么做的好处是,用户在请求详细结果时可以设定参数需要详细数据的详细程度,比方说只需要解析结果的头10条,采样的100条,这些都可以在返回时候处理,而且使用 LinQ 处理起来也很简单,List<T>.Skip(int).Take(int) 即可。经测试一般用户输入300kb的原始文件,会产生约 4Mb 的 json 数据,所以如果完整原始输出是相当可怕的,所以默认会缩减输出数据,即数据库中仍然存入这个约 4 Mb 的对象,用户请求详细数据的时候只返回采样后的部分记录,比如 1000 条记录,这样输出到接口 api 调用方大约 200 kb 数据,gzip 压缩之后大概 ~70 kb,这对于前端来讲是可接受的,也节约了服务器的输出带宽。

实际应用中,上线三天来数据库增长到现在的 1.3 Gb,记录约 200 条,目前查询仍然是毫秒级别,这个数据库不会作为持久存储,只是为调用方临时存储数据,通常服务器会三天左右清除一次这个数据库,目前 LiteDB 的表现是比较令人满意的。

LiteDB 的使用很简单:

> Install-Package LiteDB

下面是官网的一个例子:

// Basic example
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public string[] Phones { get; set; }
public bool IsActive { get; set; }
} // Open database (or create if not exits)
using(var db = new LiteDatabase(@"MyData.db"))
{
// Get customer collection
var customers = db.GetCollection("customers"); // Create your new customer instance
var customer = new Customer
{
Name = "John Doe",
Phones = new string[] { "8000-0000", "9000-0000" },
IsActive = true
}; // Insert new customer document (Id will be auto-incremented)
customers.Insert(customer); // Update a document inside a collection
customer.Name = "Joana Doe"; customers.Update(customer); // Index document using a document property
customers.EnsureIndex(x => x.Name); // Use Linq to query documents
var results = customers.Find(x => x.Name.StartsWith("Jo"));
}

LiteDB 的数据库文件头部有个几字节表示数据库类型,默认就是 LiteDB,如果需要自己定义,可以在源代码 HeaderPage.cs 中修改 HEADER_INFO 常量。忘了说,LiteDB 还可以存储文件,这个配合 HEADER_INFO 使用,可以号称自己发明了一种新型文件格式了...

逃)

在实际项目中使用LiteDB NoSQL数据库的更多相关文章

  1. 项目实战11—企业级nosql数据库应用与实战-redis的主从和集群

    企业级nosql数据库应用与实战-redis 环境背景:随着互联网2.0时代的发展,越来越多的公司更加注重用户体验和互动,这些公司的平台上会出现越来越多方便用户操作和选择的新功能,如优惠券发放.抢红包 ...

  2. 一个Web项目中实现多个数据库存储数据并相互切换用过吗?

    最近公司一个项目需要连接多个数据库(A和B)操作,根据不同的业务模块查询不同的数据库,因此需要改造下之前的spring-mybatis.xml配置文件以及jdbc.properties配置文件,项目后 ...

  3. django同一个项目中连接多个数据库

    一.场景与思路 同一个项目中需要连接多个数据库. 二.代码 代码中主要是三个部分,settings.models以及自己写的一个类. 1.自己写的文件:database_app_router.py  ...

  4. Asp.net Core 项目中如何使用 MongoDB 数据库

    内容来源 https://blog.csdn.net/qq_26900081/article/details/83272132 一.添加依赖 1.MongoDB.Driver 2.MongoDB.Bs ...

  5. .NET平台开源项目速览(7)关于NoSQL数据库LiteDB的分页查询解决过程

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑) 与 .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB中,介绍了LiteDB的基本使用情况以及部 ...

  6. 在项目中使用SQLite数据库小结

    ------------------------------------------------------------------------推荐: - VS2012 使用 1.0.84 版的库 - ...

  7. Java Web项目中连接Access数据库的配置方法

    本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...

  8. 技术分享|SQL和 NoSQL数据库之间的差异:MySQL(VS)MongoDB

    在当今市场上,存在各种类型的数据库,选择适合你业务类型的数据库对应用的开发和维护有着重要意义.本篇文章,将为大家分享SQL和NoSQL语言之间的区别,同时还将比较这两种类型的数据库,以帮助小伙伴们选择 ...

  9. android读取apk中已经存在的数据库信息

    在android数据库编程方面,大家有没有遇到过,我要从指定位置的已经存在的数据库来进行操作的问题.之前我尝试了很多方法都没有成功,后来找到了解决的方法.   下面说明下这段代码的意思,第一步先判断在 ...

随机推荐

  1. ReactJS基础(续)

    前边的ReactJS基础,我们可以了解到,对于React,可以说是万物皆组件 React的组件应该具有 可组合(Composeable)可重用(Reusable)可维护(Maintainable)的特 ...

  2. Ext TabPanel tabbar添加按钮

    tabPanel tabbar添加按钮 this.tabPanel = Ext.create('Ext.tab.Panel', { tabBar:{ items:[{ //组件靠右 xtype: 't ...

  3. 如何将md文件转换成带目录的html文件

    配置环境node 去官网下一个node安装包,下一步下一步: 由于现在的node都自带npm,直接 npm install i5ting_toc 这样安装好了i5ting_toc这个包, 进入你实现准 ...

  4. Jenkins的安装配置

    Jenkins的安装配置 一.Jenkins简介 Jenkins 是一个可扩展的持续集成引擎.Jenkins可以帮我们将代码进行统一的编译打包.还可以放到tomcat容器中进行发布.简单来说就是我们通 ...

  5. windows安装程序无法将windows配置为在此计算机的硬件上运行

    关于装windows系统时,出现一些安装中断的处理 该方法适用于 windows安装程序无法将windows配置为在此计算机的硬件上运行 计算机意外地重新启动或遇到错误. Windows 安装无法继续 ...

  6. java 数据库编程 学习笔记 不断更新

    最近开始学习java,感觉java的数据库编程需要发个随笔记录一下,话不多说 切入正题. 一.数据库访问技术的简介 应用程序  →  执行SQL语句 →数据库 → 检索数据结果 → 应用程序   ( ...

  7. Iterator对对象遍历

    //实例对象tables List<Table> tables = new TableManager(getApplicationContext()).queryTables();  sp ...

  8. 求从n个数组任意选取一个元素的所有组合

    最近做项目碰到这个问题,如题从n个数组任意选取一个元素的所有组合.比如已知数组是[1, 3]; [2, 4]; [5]; 最后组合结果是[1, 2, 5]; [1, 4, 5];  [3, 2, 5] ...

  9. Sublime Text中安装插件来实现px与rem间的换算

    今天在群里无意中看到了群友分享的一篇关于移动端的文章.里面其他内容我倒不大感兴趣,反而是rem让我提起了兴趣. 首先来谈一下rem,rem是CSS3中新增加的一个单位值,它和em单位一样,都是一个相对 ...

  10. java 关键字final

    一.最终的意思,可以修饰类,方法,变量.特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量.二.面试相关: 1.局部变量基本类型 值不能发生改变 例如: ...