10

我很好奇是否有人已经实现甚至知道任何构建在 NoSQL 平台(例如 riak)上的双时态数据库。

4

4 回答 4

2

我不知道有任何专门设计用于处理时间数据的 NoSQL 数据存储。为了将有效时间段和交易时间段放入 Riak 中的数据中,您需要:

  1. 使用可以保存元数据的结构包装您的文档/值,例如:

    {元:{有效:[“2001-11-08”,“2001-11-09”],交易:[“2011-01-29 10:27:00”,“2011-01-29 10:28: 00"] } payload:"这是我要存储的实际文档/值!" }

  2. 为每个文档创建一个“元文档”并使用Riak Links将它们链接起来。
    我认为这有点清洁,但如果您需要经常检索这些时间,那么这种方法可能太慢了。

如果您想按时间检索文档,那么我认为 Riak(或我知道的任何其他键/值数据存储)不会是正确的数据存储。SQL 或一些 BigTable 系统可能是您唯一的好选择。

于 2011-01-29T18:38:34.650 回答
1

我写了一个基于 Mongodb 的小型双时态开源数据库层:

https://github.com/1123/bitemporaldb

在存储 Scala 或 Java 对象时,对象被包装到具有双时元信息(有效时间、事务时间)的通用双时对象中。随后它被序列化为 json 并作为 BSON 存储在 MongoDB 中。

它透明地处理对象的时间和非时间更新。可以通过双时间上下文进行搜索。

双时态数据的面向文档的数据库是有益的,因为面向文档的存储减少了数据检索的连接数量。双时间上下文中的连接可能效率低下,并且难以手动编码。

非常欢迎反馈、贡献和功能请求。

于 2014-11-14T21:19:39.523 回答
1

为了支持双时态(或时态数据库模型),您需要酸性事务来执行正确的 DML 以更新和插入两个时间维度(有效/有效时间和事务/系统时间)的记录。有关时间建模的详细信息,请参阅。

例如,流行的 NoSQL 数据库(如 Cassandra、MongoDB、Couchbase)没有 ACID 支持来执行支持双时态记录操作所需的必要记录更新/插入操作。对于时态和双时态数据库,记录绝不能重叠,并且当被后续的有效/事务时间记录取代时,必须正确终止记录。

MarkLogic NoSQL 数据库声称支持双时态,但从未尝试过并且不是开源的。但是您可以通过使用有效地充当有效/事务时间跟踪日志的 ACID 数据库来推出自己的解决方案,然后将 NoSQL 用于实际数据存储。在此处查看此方法的高级描述。

于 2016-02-05T04:04:13.270 回答
0

来自维基百科:

“双时态数据是时态数据库中使用的概念。它表示数据的有效时间和事务时间。在数据库表中,双时态数据通常由四个额外的表列 StartVT 和 EndVT、StartTT 和 EndTT 表示。每次区间在其下限处关闭,在其上限处打开。”

所以你不能只把这四个值放到你的数据上吗?

于 2011-01-14T02:28:55.133 回答