在实际项目中使用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数据库编程方面,大家有没有遇到过,我要从指定位置的已经存在的数据库来进行操作的问题.之前我尝试了很多方法都没有成功,后来找到了解决的方法. 下面说明下这段代码的意思,第一步先判断在 ...
随机推荐
- 【Android Developers Training】 0. 序言:构建你的第一个应用
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 46. 处理音频外放设备
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- iOS多线程开发之离不开的GCD(上篇)
一.GCD基本概念 GCD 全称Grand Central Dispatch(大中枢队列调度),是一套低层API,提供了⼀种新的方法来进⾏并发程序编写.从基本功能上讲,GCD有点像NSOperatio ...
- 微信浏览器的页面跳转及刷新的bug
在页面的请求地址后面加一个参数,随机数 页面刷新 window.location.href=window.location.href+"?id="+10000*Math.rando ...
- Unity 游戏框架搭建 (一) 概述
为了重构手头的一款项目,翻出来当时未接触Unity时候收藏的视频<Unity项目架构设计与开发管理>,对于我这种初学者来说全是干货.简单的总结了一下,以后慢慢提炼. 关于Unity的架 ...
- Python爬虫小白---(二)爬虫基础--Selenium PhantomJS
一.前言 前段时间尝试爬取了网易云音乐的歌曲,这次打算爬取QQ音乐的歌曲信息.网易云音乐歌曲列表是通过iframe展示的,可以借助Selenium获取到iframe的页面元素, 而QQ音乐采用的是 ...
- MyBatis源码解析【5】工厂的构建
前言 这个分类比较连续,如果这里看不懂,或者第一次看,请回顾之前的博客 http://www.cnblogs.com/linkstar/category/1027239.html 终于算是把装备弄齐全 ...
- Eclipse 快捷键和模板设置
快捷键设置 菜单 Window --> Preferences---General---Keys Content Assist: 代码提示快捷键 模板设置 新建一个模板 在Insert Va ...
- voa 2015 / 4 / 13
couch potato : someone who likes to spend a lot of time sitting or lying down while watching televis ...
- Unreal Engine 4 Radiant UI 插件入门(三)——从蓝图中调用JS
不知道大家有没有混淆.这篇教程说的是从蓝图中调用JS的功能(以改变H5内的内容). 在安装了UE4和RadiantUI的前提下学习这篇教程.本篇教程接着上一篇教程,建议请先看上一篇. 第一步:在网页中 ...