我想知道是否有人在NoSQL平台上(例如riak)构建过任何基于双时间轴的数据库。
我想知道是否有人在NoSQL平台上(例如riak)构建过任何基于双时间轴的数据库。
{ meta:{ valid:["2001-11-08", "2001-11-09"], transaction:["2011-01-29 10:27:00", "2011-01-29 10:28:00"] } payload:"这是我想要存储的实际文档/值!" }
如果你想按时间检索文档,那么我认为 Riak(或我所知道的任何其他键/值数据存储)都不是正确的数据存储系统。SQL 或可能是某个 BigTable 系统可能是你唯一的好选择。
https://github.com/1123/bitemporaldb
在存储Scala或Java对象时,该对象会被包装成一个通用的双时间轴对象,并带有双时间轴元信息(有效时间,事务时间)。随后,它会被序列化为json并以BSON格式存储在MongoDB中。
它可以透明地处理对象的时间和非时间更新。通过双时间轴上下文进行搜索是可能的。
面向文档的数据库对于双时间轴数据非常有益,因为文档导向的存储减少了数据检索的连接数。在双时间轴上下文中,手动编写连接可能效率低下且难以实现。
欢迎提供反馈、贡献和功能请求。
为支持双重时间(或时间DB模型),您需要ACID事务来执行适当的DML以在两个时间维度(有效时间和事务/系统时间)上更新和插入记录。有关时间建模的详细信息,请参见此处。
像Cassandra、MongoDB、Couchbase等流行的NoSQL数据库都没有ACID支持,无法执行必要的记录更新/插入操作以支持双重时间记录操作。使用时间和双重时间数据库时,记录不能重叠,并且必须在下一个有效/事务时间记录取代之后正确终止记录。
MarkLogic NoSQL数据库声称支持双重时间,但从未尝试过,并且不是开源的。但是您可以通过使用ACID数据库作为有效/事务时间跟踪日志并使用NoSQL作为实际数据存储器来自行解决方案。请参见此处的高级描述。
来自维基百科:
“双时间数据是在时间数据库中使用的一个概念。它表示数据的有效时间和事务时间。 在数据库表中,双时间数据通常由四个额外的表列StartVT和EndVT、StartTT和EndTT表示。每个时间间隔在其下限处关闭,在其上限处开放。”
所以你不能只将这四个值放到你的数据上吗?