Как очищать устаревшие данные в коллекции с высокой нагрузкой?

Всем привет. Есть два шарда, коллекция с нагрузкой где-то 600 запросов добавления и обновления в секунду. Появилась проблема очистки устаревших записей. Первым решением было написать утилиту, которая запускалась бы во время минимальной нагрузки и удаляла бы устаревшие записи. Но после запуска утилиты, удаление блокировало работу(что и ожидалось) и при этом работало часов 12, что неприемлемо. Потом мы ввели TTL-индекс, однако это привело также к большому числу очередей и возросшей нагрузки на CPU. Посоветуйте лучший подход к удалению устаревших данных в высоконагруженной системе. Заранее спасибо.
  • Вопрос задан
  • 4776 просмотров
Пригласить эксперта
Ответы на вопрос 5
@biomorf
А можно написать утилитку которая будет запускаться по шедулеру и удалять данные маленькими пачками, что бы не блокировать на долго работу базы.
Ответ написан
Комментировать
7workers
@7workers
а capped collection не пробовали?
Ответ написан
@1nd1go
Добавляете еще 2 шарда, и переодически переключаете с одного на другой. Пока второй работает, первый очищаете.
Ответ написан
Alvaro
@Alvaro Автор вопроса
Да уж, и как делать синхронизацию данных между двумя кластерами?
Ответ написан
@biomorf
Может просто увеличить количество шардов и использовать всё тот же TTL-индекс? Нагрузка на каждый шард должна снизиться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы