我正在考虑将 RethinkDB 用于应用程序并且需要实施历史版本控制。在 PostgreSQL 中,我实现了时间旅行,其中每次更新或删除都会触发一个函数,其中新的通过 +1 插入版本号并分配
valid_from = now()
,而旧的通过更改 valid_to
字段成为历史。
我可以在 RethinkDB 中做同样的事情吗?
我已经建立了一个新的数据库,表并按照说明进行操作,但似乎一切都想做更新。
我在这里回答了另一个问题类似于这个问题.
基本上,您只需在数据模型中设置某些期望值,就可以非常轻松地做到这一点。我还假设文档只更新了有限的次数。目前 RethinkDB 中的文档建议有 16MB 的限制,因此如果您希望数据超过该限制,那么您应该插入一个新文档并按照您提到的那样进行有效的属性布尔翻转。
基本上,不是在更新文档时创建一个全新的行|文档,而是在文档本身中有一个值为数组的属性:
{
id: "a randomly generated uuid",
order_id: 1,
orders: [
{
quantity: 40, price: 100, timestamp: "12:35AM 4/22/2016" // Newest modification
},
{
quantity: 20, price: 100, timestamp: "12:03AM 4/22/2016" // Original order
}
]
}
每次修改文档时,只需修改数组的索引0,然后在开头插入最新版本的文档。因此,如果我们修改上面的示例销售文档,它现在看起来像这样:
{
id: "a randomly generated uuid",
order_id: 1,
orders: [
{
quantity: 80, price: 100, timestamp: "1:00AM 4/22/2016" // Newest modification
},
{
quantity: 40, price: 100, timestamp: "12:35AM 4/22/2016" // Newest modification
},
{
quantity: 20, price: 100, timestamp: "12:03AM 4/22/2016" // Original order
}
]
}
这有意义吗?您可以在我链接的其他答案中找到一些示例 Javascript 代码。