3

是否有用于批量数据持久性的 ACID 框架,它还允许一些基本的搜索功能?我不是在寻找一个成熟的 DBMS,而是在寻找快速、轻便和简单的东西。即使只是处理原子提交的东西也会很棒,只是为了避免在电源故障的情况下重新发明它。

SQL Server 对此太慢并且开销太大,SQLite 甚至更慢(开销可能更少?)。

基本上,我需要每秒存储大量时间戳数据。作为规范化数据,这将对应于 ~10k 表行,但作为二进制数据,它可以使用 ~200kb 表示。显然,与将 10k 行写入关系数据库相比,将 200kb 写入磁盘是小菜一碟。

我可以简单地将它保存在一个或多个大型二进制文件中,然后实现我自己的一些索引以允许对某些字段进行快速过滤,但唯一让我害怕的是非原子事务和读/写锁定场景。

有什么建议吗?我正在使用 C# 顺便说一句,所以任何带有 .NET 包装器的东西都是首选。

[编辑]关于 ACID,我刚刚发现了这个,例如:Transactional NTFS 的托管包装器(尽管TxF是“Vista 及更高版本”功能)。

4

1 回答 1

1

传统的基于 SQL 的存储将提供 ACID,但是许多批量更新会很慢。另一方面,NoSQL 解决方案/键值存储通常不会为您提供可靠的事务或某种方式来无缝索引以通过其他方式进行快速查找,而不仅仅是单个键。所以我们需要结合两种方法的好处的东西。

我会考虑使用 CouchDB (NoSQL map/reduce document-based DB with RESTful API) 并采用以下策略: CouchDB 在原子地保存多个文档方面没有事务,但是当它着手保存单个文档时 - 它是超级可靠和原子,还允许多版本并发控制。

因此,如果您有 10000 条记录数据块,每条记录约 200-300 kB,您可以将其保存为单个文档。这对您来说可能听起来很奇怪,但问题是您可以在文档集合之上构建视图,这些文档集合实际上是增量索引。一个文档可能会产生多个视图结果。视图是用 javascript 编写的(仅在文档创建/更新时评估一次),因此您可以根据需要对它们进行索引 - 通过关键字、数值、日期 - 几乎可以使用 javascript 执行任何操作。获取视图结果非常快,因为它们被预先索引到 B+-树中。

这种方法的好处:

  • CouchDB 使用 JSON over HTTP 作为其数据传输协议,因此您可以使用任何 HTTP 客户端或 REST 客户端或本机 C# 包装器(周围有几个可用的)
  • 您对该 200 kB 文档的批量插入将是原子的,并采用单个 HTTP 请求
  • 您的插入将是异步的,因为它只是一个 HTTP。
  • 您将拥有 MVCC - CouchDB 非常擅长并发性,因此您将忘记任何锁或其他事情。

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

于 2010-11-25T17:32:35.287 回答