Удаление устаревших данных с MongoDB - PullRequest
1 голос
/ 08 ноября 2019

У меня есть устройства IoT, которые считывают данные о давлении в MongoDB через MQTT.

Дело в том, что для отображения этих данных с течением времени требуется много ресурсов, а также тратится место на диске. Поэтому я хочу сделать так, чтобы сохраненные данные постепенно удалялись. Я хочу оставить 1/1 в течение часа, 1/4 в день, 1/4 этого снова в течение недели и 1/4 этого постоянно. Моя первоначальная идея заключалась в том, чтобы использовать какие-то модули по мере публикации данных, устанавливая правильные временные рамки.

Я пытался просмотреть функцию TTL MongoDB, но мне кажется, что она устанавливает таймер для всей коллекции, и единственная опция, которую я имею, - какие конкретные документы будут затронуты ею.

У меня есть промежуточное ПО Java, отправляющее данные для меня в MongoDB, лучше ли сделать так, чтобы Java-программа делала это? Я все еще не уверен, как я могу удалить каждые n записей.

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Индексы TTL Монго для каждого документа. См .: https://docs.mongodb.com/manual/core/index-ttl/

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

db.collection.createIndex( { "expireAt": 1 }, { expireAfterSeconds: 0} )

Это заставит Монго истечьдокумент, когда эта дата была достигнута.

Имейте в виду, что, как вы упомянули, вам нужно заранее определить дату истечения срока действия, поэтому вам нужно будет сделать 1/4 части при вставке документа.

1 голос
/ 08 ноября 2019

Да, в моей фирме, мне также приходилось очищать устаревшие данные. К счастью, у документов коллекции была устаревшая дата (в основном, «дата последнего изменения»), и я смог использовать Java для отбраковки коллекции документов, которые перешли порог.

Я бы, вероятно, написал бы компонент или скрипт, который запускается ежедневно, который будет проверять элемент в ваших документах (надеюсь, дату), а затем начинать удаление каждого четвертого элемента или того, что не основано на массиве возвращаемых объектов. это X количество времени старого.

...