双时态NoSQL数据库是否有任何设计模式?

时间:2010-10-21 16:26:10

标签: database database-design nosql temporal-database temporal

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

4 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:1)

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

https://github.com/1123/bitemporaldb

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

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

面向文档的双时态数据数据库是有益的,因为面向文档的存储减少了数据检索的连接数。在双时态环境中加入可能效率低下且难以手工编码。

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

答案 2 :(得分:1)

要支持双时态(或临时数据库模型),您需要使用酸性事务来执行适当的DML来更新和插入两个时间维度的记录(有效/有效时间和事务/系统时间)。关于时间建模的See for details

像Cassandra,MongoDB,Couchbase这样流行的NoSQL数据库没有ACID支持来执行支持双时态记录操作所需的必要记录更新/插入操作。对于时态和双时态数据库,记录必须永远不会重叠,并且当被有效/事务时间记录取代时,记录必须正确终止。

MarkLogic NoSQL数据库声称支持双时态,但从未尝试过,也不是开源的。但是,您可以使用ACID数据库来滚动自己的解决方案,该数据库有效地用作有效/事务时间跟踪日志,然后将NoSQL用于实际数据存储。请参阅此approach here的高级描述。

答案 3 :(得分:0)

来自维基百科:

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

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