Запись сотен объектов данных в базу данных Mongo

Я работаю в сети Minecraft, в которой есть несколько серверов, управляющих «пользовательскими объектами», которые являются просто документом Mongo. После изменения пользовательского объекта его необходимо немедленно записать в базу данных, в противном случае он может быть перезаписан на других серверах (которые имеют более старую версию пользовательского объекта), но иногда необходимо записать сотни объектов за короткое время. времени.. (через несколько секунд). Мой вопрос: как я могу легко записывать объекты в базу данных MongoDB, не перегружая базу данных.

Я обдумывал идею, но понятия не имею, актуальна ли она: - Создайте какую-то очередь в другом потоке, каждый раз, когда объект данных необходимо сохранить в базе данных, он попадает в очередь, а затем в очередь thread' объекты будут сохраняться один за другим с некоторым интервалом..

заранее спасибо

Кстати, я использую Morphia в качестве основы в Java


person wouterdz    schedule 21.10.2014    source источник


Ответы (1)


«сотни объектов [...] за несколько секунд» звучит не так уж и много. Сколько вы можете сделать в данный момент?

Параметр, наиболее важный для скорости операций записи, — WriteConcern. . Что вы используете в данный момент и подходят ли эти настройки для вашего проекта (безопасность данных или скорость)?

Если вам нужно выполнять много операций записи одновременно, вы, вероятно, можете ускорить работу с помощью массовых операций. Они были добавлены в MongoDB 2.6, и Morphia также их поддерживает — см. это модульный тест.

Я был бы очень осторожен с очередью:

  • Вам это действительно нужно? В зависимости от вашего оборудования и конфигурации вы сможете выполнять сотни или даже тысячи операций записи в секунду.
  • Действительно ли асинхронность лучший подход для вас? Производитель операции/сообщения записи может только предполагать, что его изменение было применено, но, вероятно, это не так, и он все еще ожидает записи в очереди. Это предполагаемое поведение?
  • Облегчает ли это вашу жизнь? Вам нужно знать еще одну программу, которая добавляет много новых и, скорее всего, непредвиденных проблем.
  • Если вам нужно масштабировать свои записи, почему бы не использовать сегментирование? Никаких дополнительных технологий, и ваш код будет вести себя одинаково с ними и без них.

Возможно, вы захотите прочитать следующий пост в блоге о том, почему вы, вероятно, хотите избегать очередей для такого рода операций в целом: http://widgetsandshit.com/teddziuba/2011/02/the-case-against-queues..html

person xeraa    schedule 21.10.2014