在实际项目中使用LiteDB NoSQL数据库
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数据库的更多相关文章
- 项目实战11—企业级nosql数据库应用与实战-redis的主从和集群
企业级nosql数据库应用与实战-redis 环境背景:随着互联网2.0时代的发展,越来越多的公司更加注重用户体验和互动,这些公司的平台上会出现越来越多方便用户操作和选择的新功能,如优惠券发放.抢红包 ...
- 一个Web项目中实现多个数据库存储数据并相互切换用过吗?
最近公司一个项目需要连接多个数据库(A和B)操作,根据不同的业务模块查询不同的数据库,因此需要改造下之前的spring-mybatis.xml配置文件以及jdbc.properties配置文件,项目后 ...
- django同一个项目中连接多个数据库
一.场景与思路 同一个项目中需要连接多个数据库. 二.代码 代码中主要是三个部分,settings.models以及自己写的一个类. 1.自己写的文件:database_app_router.py ...
- Asp.net Core 项目中如何使用 MongoDB 数据库
内容来源 https://blog.csdn.net/qq_26900081/article/details/83272132 一.添加依赖 1.MongoDB.Driver 2.MongoDB.Bs ...
- .NET平台开源项目速览(7)关于NoSQL数据库LiteDB的分页查询解决过程
在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑) 与 .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB中,介绍了LiteDB的基本使用情况以及部 ...
- 在项目中使用SQLite数据库小结
------------------------------------------------------------------------推荐: - VS2012 使用 1.0.84 版的库 - ...
- Java Web项目中连接Access数据库的配置方法
本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...
- 技术分享|SQL和 NoSQL数据库之间的差异:MySQL(VS)MongoDB
在当今市场上,存在各种类型的数据库,选择适合你业务类型的数据库对应用的开发和维护有着重要意义.本篇文章,将为大家分享SQL和NoSQL语言之间的区别,同时还将比较这两种类型的数据库,以帮助小伙伴们选择 ...
- android读取apk中已经存在的数据库信息
在android数据库编程方面,大家有没有遇到过,我要从指定位置的已经存在的数据库来进行操作的问题.之前我尝试了很多方法都没有成功,后来找到了解决的方法. 下面说明下这段代码的意思,第一步先判断在 ...
随机推荐
- 网页标题title的闪动提示
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 错误Fatal error: Call to undefined function mb_strlen()的解决办法
其实这个就是没有开启php_mbstring模块.Windows下只需要修改安装目录下的php.ini文件把extension=php_mbstring.dll前面的“#”号注释符去掉保存后重启Apa ...
- 【Android Developers Training】 87. 序言:同步到云
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Sublime text3插件安装方法
一.安装sublime text3插件的方法: 1.Ctrl+~键,调出console,将下面代码复制到底部命令行,回车: import urllib.request,os; pf = 'Packag ...
- C++基础之引用与指针的区别与联系、常引用使用时应注意的问题
什么是引用? 引用就是对变量起一个别名,而变量还是原来的变量,并没有重新定义一个变量.例如下面的例子: #include<iostream> using namespace std; ...
- Java 中基本类型和字符串之间的转换
Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...
- require.js(浅聊)
一.require 了解requirejs之前首先明白什么是模块化: 1.什么是模块化? 模块化设计是指在对一定范围内的不同功能或相同功能不同性能.不同规格的产品进行功能分析的基础上,划分并设计出一系 ...
- gulp使用流程
1.全局安装gulp $ npm install --global gulp 2.作为项目的开发依赖(devDependencies)安装 $ npm install --save-dev gulp ...
- 记VUE的v-on:textInput无法执行事件的BUG
<div id="wrap"> <input type="text" v-on:textInput="fn"> &l ...
- JavaScript一个猜数字游戏
效果图: 代码: <body> <script type="text/javascript"> window.onload = newgame; //页面载 ...