У меня есть ковш на диване, на который есть несколько документов. С течением времени я вижу, что эти документы быстро занимают много места для хранения. Сейчас я работаю над установкой TTL для всех новых документов, которые будут храниться. Есть ли способ установить TTL для всего существующего документа или удалить существующие документы в зависимости от срока действия? У разных документов разный срок действия в зависимости от типа документа (от 15 минут до 1 месяца). Не могли бы вы предложить подход, который я могу использовать?
Couchbase - удаление старых документов по TTL
Ответы (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 пока. Но, как я сказал выше, вы можете ВЫБРАТЬ / УДАЛИТЬ документы по истечении срока их действия.