我正在设计我的后端。我有一个json数组/队列/东西,我只需要任何最多2周的数据,这是连续附加到。我只想从这个"队列"中删除,而不是从容器文档中删除。我可以使用TTL,还是TTL只能用于整个文档?
有更好的方法吗?我应该将它们作为单独的文档存储在每日或每小时的数组中吗?
运行couchbase 2.2。
答案 0 :(得分:5)
Couchbase中的TTL仅适用于整个文档,不可能使文档的子集失效。就像你说的那样,你总是可以拥有不同到期时间的单独文档,在这些文档中你有一个类型,日期,然后是数据数组作为元素。
然后使用这样的视图:
function (doc, meta) {
if(meta.type == "json") {
if(doc.type == "ordered_data") {
if(doc.date) {
emit(dateToArray(doc.date));
}
}
}
}
您可以按日期排序所有相关数据(标记降序设置为true),它还允许您的应用通过传入一个或多个键来选择特定日期。即选择日期范围为2天,1周等。当文档过期时,它会在更新时从视图中删除(根据您的陈旧参数加上操作一秒钟/时间而变化)。
然后,您可以在应用程序层执行所需的任何连接或额外处理。还有其他选择,但对我来说这是解决问题最明智的方法,任何问题只是评论,我们会再试一次。
P.S。你的阵列有多大?如果它们非常大,那么你可能需要寻找一种不同的技术或方法来解决问题。