Советы, трюки и gotchas MongoDB

Из вашего опыта, пожалуйста, поделитесь своим любимым советом MongoDB, например:

  • Что вы изучили с трудом?
  • Какие функции могут быть неожиданными, особенно для новичков, исходящих из фона RDBMS?
  • Какие наилучшие методы наиболее важны?

Ответы

Ответ 1

Я использовал MongoDB (и пробовал MongoMapper и Mongoid адаптеры с Rails) в течение нескольких месяцев. Ранее я был глубоко укоренен в SQL. Вот мои наблюдения:

  • Отсутствие схемы и миграций не означает, что вы получаете бесплатный обед. Ваш код приложения должен нести логику и ограничения, которые должны выполнять схемы SQL. Вы должны быть гораздо более дисциплинированными, чтобы вручную переносить данные, например. когда вы переименовываете атрибут, иначе код приложения должен иметь дело с несколькими именами для одной и той же вещи (в этом примере). Это может легко привести к большому количеству мусора в базе данных и/или неясным ошибкам. MongoDB велик, потому что вам не нужно определять априори то, что вещи собираются хранить, и вы можете поместить целые массивы и иерархии объектов в любой атрибут. В какой-то степени простота использования приносит гораздо меньше безопасности, и я думаю, что мы все еще разрабатываем множество лучших практик, связанных с тем, как избежать большого объема технического долга здесь.
  • Нет объединений - это означает, что вам нужно знать ваши шаблоны доступа к данным (по крайней мере, те, которые должны быть масштабируемыми) при создании ваших коллекций.
  • Никаких транзакций - это открывает риск условий гонки, если одни и те же записи в коллекциях обновляются с одновременных запросов. Для односетевых обновлений существуют атомарные операции, и они особенно хорошо поддерживаются и используются Mongoid (но не MongoMapper).
  • Максимальный рекорд записи для любой записи. В отличие от полей text в SQL, которые могут принимать контент произвольного размера, MongoDB имеет жесткий предел 16 МБ для любой записи. Это стоит того, что вы планируете хранить, например. большие массивы, иерархии объектов и т.д.