gpt4 book ai didi

sql - 用于管理键值存储中的时态数据的资源或工具是什么?

转载 作者:行者123 更新时间:2023-12-04 23:51:19 26 4
gpt4 key购买 nike

我正在考虑在需要维护历史记录的项目上使用 MongoDB 或 CouchDB。但是我不确定在这些数据库中存储历史数据会有多困难。

例如,理查德·斯诺德格拉斯 (Richard Snodgrass) 在他的《用 SQL 开发面向时间的数据库应用程序》一书中指出了用于检索特定时刻数据状态的工具,并指出了如何创建允许稳健数据的模式操纵(即使无效数据输入变得困难的数据操纵)。

是否有工具或库可以更轻松地查询、操作或定义键值存储的时间/历史结构?

编辑:

请注意,据我所知,CouchDB 存储的“版本”数据在正常使用期间会被删除,而且由于我需要维护历史数据,我认为这不是一个可行的解决方案。

附言这是一个从未回答过的类似问题:key-value-store-for-time-series-data

最佳答案

如果您想将数据存储在 MongoDB 中,有几个选项。您可以将每个版本存储为单独的文档,这样您就可以在特定时间查询获取对象,在所有时间获取对象,在时间范围内获取对象等。每个文档看起来像:

{
object : whatever,
date : new Date()
}

您可以将文档的所有版本存储在文档本身中,正如 mikeal 所建议的那样,使用更新将对象本身推送到历史数组中。在 Mongo 中,这看起来像:

db.foo.update({object: obj._id}, {$push : {history : {date : new Date(), object : obj}}})

// make changes to obj
...

db.foo.update({object: obj._id}, {$push : {history : {date : new Date(), object : obj}}})

一种更酷的(我认为)和更节省空间的方式,虽然时间效率较低,但可能是在对象本身中存储关于对象每次更改的内容的历史记录。然后您可以重播历史以在特定时间构建对象。例如,您可以:

{
object : startingObj,
history : [
{ date : d1, addField : { x : 3 } },
{ date : d2, changeField : { z : 7 } },
{ date : d3, removeField : "x" },
...
]
}

然后,如果您想查看对象在时间 d2 和 d3 之间的样子,您可以使用 startingObj,添加值为 3 的字段 x,将字段 z 设置为值 7,这将是当时的对象。

每当对象改变时,您可以自动将操作推送到历史数组:

db.foo.update({object : startingObj}, {$push : {history : {date : new Date(), removeField : "x"}}})

关于sql - 用于管理键值存储中的时态数据的资源或工具是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1975454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com