我可以在couchbase文档的成员上使用TTL吗?

时间:2014-03-26 15:15:18

标签: couchbase

我正在设计我的后端。我有一个json数组/队列/东西,我只需要任何最多2周的数据,这是连续附加到。我只想从这个"队列"中删除,而不是从容器文档中删除。我可以使用TTL,还是TTL只能用于整个文档?

有更好的方法吗?我应该将它们作为单独的文档存储在每日或每小时的数组中吗?

运行couchbase 2.2。

1 个答案:

答案 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。你的阵列有多大?如果它们非常大,那么你可能需要寻找一种不同的技术或方法来解决问题。