Документы, которые со временем существенно растут, могут быть бомбами замедленного действия. Пропускная способность сети и использование ОЗУ, вероятно, станут измеримыми узкими местами, заставляя вас начинать все сначала.
Сначала рассмотрим две коллекции: Customer и Payment. Таким образом, зерно довольно мало: один документ за платеж.
Затем вы должны решить, как смоделировать информацию об учетной записи, такую как кредитные карты. Давайте рассмотрим, содержат ли документы клиентов массивы информации об учетной записи или вам нужна новая коллекция учетных записей.
Если документы учетной записи отделены от документов клиента, загрузка всех учетных записей одного клиента в память требует загрузки нескольких документов. Это может привести к дополнительной памяти, вводу / выводу, пропускной способности и использованию процессора. Означает ли это, что сбор учетных записей - плохая идея?
Ваше решение влияет на платежные документы. Если информация об учетной записи встроена в документ клиента, как бы вы на нее ссылались? Отдельные документы счета имеют собственный атрибут _id. С помощью встроенной информации об учетной записи ваше приложение будет либо создавать новые идентификаторы для учетных записей, либо использовать атрибуты учетной записи (например, номер учетной записи) для ключа.
Может ли платежный документ фактически содержать все платежи, сделанные в установленные сроки (например, в день?). Такая сложность повлияет на весь код, который читает и пишет платежные документы. Преждевременная оптимизация может быть смертельной для проектов.
Как и документы счета, ссылки на платежи легко ссылаться, если платежный документ содержит только один платеж. Новый тип документа, например кредит, может ссылаться на платеж. Но создадите ли вы Кредитную коллекцию или вы вставите кредитную информацию в платежную информацию? Что произойдет, если вам позже понадобится ссылка на кредит?
Подводя итог, я добился успеха с большим количеством небольших документов и множеством коллекций. Я реализую ссылки с _id и только с _id. Таким образом, я не беспокоюсь о постоянно растущих документах, разрушающих мое приложение. Схема проста для понимания и индексации, поскольку каждая сущность имеет свою собственную коллекцию. Важные объекты не прячутся внутри других документов.
Мне бы очень хотелось услышать о ваших выводах. Удачи!