Как очищать устаревшие данные в коллекции с высокой нагрузкой?
Всем привет. Есть два шарда, коллекция с нагрузкой где-то 600 запросов добавления и обновления в секунду. Появилась проблема очистки устаревших записей. Первым решением было написать утилиту, которая запускалась бы во время минимальной нагрузки и удаляла бы устаревшие записи. Но после запуска утилиты, удаление блокировало работу(что и ожидалось) и при этом работало часов 12, что неприемлемо. Потом мы ввели TTL-индекс, однако это привело также к большому числу очередей и возросшей нагрузки на CPU. Посоветуйте лучший подход к удалению устаревших данных в высоконагруженной системе. Заранее спасибо.
Да, шардировать нельзя, но если вы можете шардировать вашу коллекцию сейчас, то просто разбросайте её по несокльким шардам. Я так понял что это не подходит. У меня не такие объёмы как у вас — около 1500 вставок в минуту и пара гигабайт, и update-ов нет. с update-ми там не просто, прочитайте. У меня не слишком много опыта с монго, но я ьы на вашем месте попробовал, тест сделать не сложно мне кажется сразу будет виден результат.
На уровне приложения скорее всего. Добавить что-то вроде двух режимов работы, при переключении на другой кластер, первый очищается и наоборот. Только надо будет позаботиться о синхронизации данных.
Пришла такая идея, но не уверен в её работоспособности. Надо проверять. Суть в следующем. Поскольку каждый шард представляет собой набор реплик, то каждый такой набор можно синхронизировать с помощью комманды rs.syncFrom(:). Когда нам надо почистить кластер, тогда происходит переключение на второй кластер. Первый останавливается и очищается. Потом с помощью syncFrom производится синхронизация реплик очищенного кластера с репликами активного. При этом синхронизируем мастер-реплику из очищенного шарда с мастером(хотя может и с любым слейвом) из соответсвующего активного шарда. По идее после синхронизации мастер должен будет разбросать данные по слейвам.
Ну тут даже не обязательно прямо два кластера целых. Вам хватит по одной дополнительной реплике на шард. То есть мастер-реплики будут просто местами меняться на время очищения.