原文:http://yahch.com/post.aspx?id=1
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 的对象,用户请求详细数据的时候只返回采样后的部分记录,比如 10