2016-06-27 2 views
1

У меня есть куча документов, хранящихся в ведре couchbase. Я хочу найти TTL для каждого документа. Есть ли способ сделать это?Определить TTL хранящихся документов - Couchbase

EDIT:

Я создал представление для отображения метаданных. Я предполагаю ниже, это время unix для истечения срока действия.

{ 
    "id": "beer-Milk-New", 
    "rev": "9-145c05b4021400005771779102000000", 
    "expiration": 1467053969, 
    "flags": 33554432 
} 

ответ

0

Вы не указали, какую версию Couchbase сервера, но этот ответ предполагает, что вы используете 4.x и может выполнить запрос N1QL.

Я думаю, что вы на правильном пути. Отметьте это сообщение в блоге об обнаружении истечения срока действия до того, как они произойдут: http://blog.couchbase.com/2016/april/detecting-expirations-of-documents-with-couchbase-server-and-n1ql

В принципе вам нужно два шага. Сначала создайте индекс по истечении срока действия.

CREATE INDEX iExpiration ON default(exp_datetime) USING GSI; 

Это не строго надо, я не думаю, но это улучшит производительность.

Во-вторых, просто запустите запрос N1QL, как показано ниже (в котором будут перечислены документы, срок действия которых истекает в течение следующих 30 секунд).

SELECT META(default).id, * 
FROM default 
WHERE DATE_DIFF_STR(STR_TO_UTC(exp_datetime),MILLIS_TO_UTC(DATE_ADD_MILLIS(NOW_MILLIS(),30,"second")),"second") < 30 
    AND STR_TO_UTC(exp_datetime) IS NOT MISSING; 

Итак, если вы хотите, чтобы найти TTL для каждого документа, вы, вероятно, нужно будет вычесть exp_datetime из текущего времени (я считаю, что это CLOCK_MILLIS()).

+1

Обратите внимание, что 'exp_datetime' здесь должно быть явно добавлено и сохранено для каждого документа. Couchbase автоматически не подвергает действительный TTL обычным способом. –

Смежные вопросы