Couchbase - удаление старых документов по TTL

У меня есть ковш на диване, на который есть несколько документов. С течением времени я вижу, что эти документы быстро занимают много места для хранения. Сейчас я работаю над установкой TTL для всех новых документов, которые будут храниться. Есть ли способ установить TTL для всего существующего документа или удалить существующие документы в зависимости от срока действия? У разных документов разный срок действия в зависимости от типа документа (от 15 минут до 1 месяца). Не могли бы вы предложить подход, который я могу использовать?


person Punter Vicky    schedule 27.06.2016    source источник


Ответы (1)


Вы можете установить срок действия документа, а затем обновить этот документ. Конечно, вам придется просмотреть все документы и установить срок действия для каждого.

Я не знаю, как это сделать на Java, но, вероятно, это похоже на .NET:

// get the document into a variable named 'doc', then
doc.Expiry = 123;
_bucket.Update(doc);

Если у вас есть только несколько хорошо известных документов, это должно быть легко.

Вы также можете использовать запрос N1QL для извлечения документов по сроку действия. Дополнительную информацию см. в этом сообщении в блоге., но суть в следующем:

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;

Что выберет документы, срок действия которых истечет менее чем через 30 секунд. Таким образом, вы можете написать запрос N1QL DELETE, который использует предложение WHERE.

ОБНОВЛЕНИЕ. Сотрудник Couchbase указал мне на проблему MB-16242. Вы не можете установить срок действия с помощью N1QL UPDATE пока. Но, как я сказал выше, вы можете ВЫБРАТЬ / УДАЛИТЬ документы по истечении срока их действия.

person Matthew Groves    schedule 27.06.2016
comment
Thnaks @mgroves. Я предполагаю, что если мне нужно установить TTL для всех этих документов, мне нужно создать представления для извлечения документов и установить TTL для всех документов. Я использую 3.X, он не поддерживает запросы N1QL. Есть ли более простой подход? - person Punter Vicky; 28.06.2016
comment
В 3.x это будет самый простой / рекомендуемый подход. - person Matthew Groves; 29.06.2016