简单的批量数据持久化框架

3
有没有适用于批量数据持久化的ACID框架,同时也可以实现一些基本的搜索功能?我不是在寻找一个完整的DBMS,而是需要一个快速、轻便和简单的东西。甚至只要能处理原子提交就很好了,以避免在断电情况下重新发明这个过程。
对于这种情况,SQL Server太慢了,而且开销太大,SQLite甚至更慢(可能开销更小?)。
基本上,我需要每秒存储大量的时间戳数据。作为规范化的数据,这将对应于约10k个表行,但作为二进制数据,它可以使用约200kb来表示。显然,相对于将10k行写入关系数据库,将200kb写入磁盘非常容易。
我可以简单地将其持久化在一个或多个大型二进制文件中,然后实现自己的索引,以允许快速过滤某些字段,但唯一让我担心的是非原子事务和读/写锁定场景。
有什么建议吗?顺便说一句,我正在使用C#,所以任何带有.NET包装器的东西都会更好。
[编辑] 关于ACID,例如,我刚刚发现这个:事务性NTFS的托管包装器(虽然TxF是“Vista及更高版本”的功能)。
1个回答

1
传统的基于 SQL 的存储将提供 ACID,但许多数据的批量更新将变慢。另一方面,NoSQL 解决方案/键值存储通常不会为您提供可靠的事务或某种无缝索引方式以进行快速查找(除了单个键之外的其他内容)。因此,我们需要将这两种方法的优点结合起来。
我会考虑使用 CouchDB(基于文档的 NoSQL 映射/减少数据库,具有 RESTful API),并采用以下策略:CouchDB 在原子保存多个文档方面没有事务,但是在保存单个文档方面非常可靠和原子化,并允许多版本并发控制。
因此,如果您有 10,000 条记录数据块,每个块约为 200-300 kB,您可以将其保存为一个 单一 文档。这对您可能听起来很奇怪,但事实上,您可以在文档集合上构建视图,这些视图实际上是增量索引。一个文档可以产生多个视图结果。视图是用 JavaScript 编写的(仅在文档创建/更新时评估一次),因此您可以按照想要的方式对它们进行索引 - 按关键字、数字值、日期等几乎可以使用 JavaScript 实现的任何内容。获取视图结果非常快,因为它们已经预先索引到 B +-树中。
这种方法的好处:
  • CouchDB使用JSON over HTTP作为其数据传输协议,因此您可以使用任何HTTP客户端或REST客户端或本地C#包装器(周围有几个可用)
  • 您的200 kB文档的批量插入将是原子性的,并且只需要一个HTTP请求
  • 由于它只是一个HTTP,所以您的插入将是异步的。
  • 您将拥有MVCC-CouchDB非常擅长并发处理,因此您将忘记任何锁定或其他事项。

给它一个机会-它为我节省了大量时间。


谢谢您的建议。实际上,它不是每个200kB的10k条记录,而是每秒约有10k个测量值,但是以二进制形式表示,每组50个测量值可以使用约1kB,因此原始二进制数据每秒相当于总共200kB。 - vgru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接