Добавить индекс TTL Монго в большую коллекцию - PullRequest
0 голосов
/ 01 марта 2019

У меня большая коллекция в Монго.Около 1,7 миллиарда записей занимают около 5 ТБ дискового пространства.Мне больше не нужно хранить эти данные бесконечно, поэтому я ищу варианты для избавления от большей части данных, предпочтительно на основе "createAt".

Мне интересно, чего ожидать, если я добавлю ttlиндекс, чтобы хранить записи только в течение месяца максимум.У меня есть следующий индекс в настоящее время:

{
        "v" : 1,
        "key" : {
                "createdAt" : 1
        },
        "name" : "createdAt_1",
        "ns" : "someNS.SomeCollection",
        "background" : true
}

Как быстро Монго сможет удалить все эти данные?Из того, что я прочитал, процесс ttl выполняется каждые 60 секунд.Сколько данных он удаляет каждый раз вокруг?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Добавление индекса TTL к такой большой коллекции может реально повлиять на производительность.Если вам нужно продолжать запрашивать эту коллекцию при создании TTL, вы можете рассмотреть первоначальное создание индекса TTL в далеком прошлом, чтобы не истек срок действия документов.После того, как индекс был создан с использованием TTL, вы можете позже настроить, как долго документы должны оставаться.

После того, как вы создали этот индекс, вы можете либо вручную выполнить запросы для удаления старых данных, покавы близки к современным требованиям и можете настраивать TTL или медленно увеличивать TTL, чтобы иметь возможность контролировать влияние на производительность.

(Источник: совет от mlab по добавлениюTTL для коллекции объемом 1 ТБ. Если вам не нужно поддерживать доступ к данным при удалении старых документов, полностью игнорируйте этот совет)

0 голосов
/ 01 марта 2019

Время операции удаления

Когда вы создаете индекс TTL в фоновом режиме, поток TTL может начать удалять документы во время создания индекса.Если вы создаете индекс TTL на переднем плане, MongoDB начинает удалять просроченные документы, как только индекс завершает сборку.

Индекс TTL не гарантирует, что истекшие данные будут удалены сразу после истечения срока действия.Может быть задержка между временем истечения срока действия документа и временем, когда MongoDB удаляет документ из базы данных.

Фоновая задача, которая удаляет просроченные документы, выполняется каждые 60 секунд.В результате документы могут оставаться в коллекции в течение периода между истечением срока действия документа и выполнением фоновой задачи.

Поскольку продолжительность операции удаления зависит от рабочей нагрузки вашего mongodНапример, просроченные данные могут существовать в течение некоторого времени после 60-секундного периода между запусками фоновой задачи.

...