Должен ли я использовать справочные документы в MongoDB в очень большом отношении «один ко многим»?

В настоящее время у меня есть такая модель:

модель

В этом случае у некоторых поставщиков есть много счетов, сотни тысяч за пару месяцев. Эта модель в настоящее время находится в базе данных Postgres, и мы разбиваем ее на микросервис, который будет использовать MongoDB .

Итак, мой вопрос: в этой новой модели, учитывая базу данных, ориентированную на документы, следует ли нам вложить Invoices в Vendor ? Безусловно, я бы сделал это, поскольку наш микросервис будет ориентирован на Vendor , но в этом случае, когда у нас много счетов, я обеспокоен тем, что документ становится слишком большим. Будет ли такая Document Reference на Document Reference более подходящей для этого случая?

Всего 1 ответ


Отношение один ко многим (N):

vendor (id, name, address)  --||---------< invoice (id, date, amount)
[1]                                        [0, 100000+]
  • Большое количество счетов для вендора и растет.
  • Вендор-ориентированное приложение; Наиболее часто и важные запросы.
  • Производительность, функциональность и ремонтопригодность являются основными проблемами.


Встраивание против ссылок:

1. Ссылка:

1.1. Обратитесь ко многим сторонам с одной стороны:

  • Ссылайтесь на счета для поставщика в виде массива идентификаторов счетов.
  • Большое количество счетов могут быть переданы.
  • В этом представлении важно, чтобы нам нужно было синхронизировать массив ссылок и связанных с ними документов.
  • Обратите внимание, что большие и растущие массивы, встроенные в документ, могут быть проблемой производительности (позже).

1.2. Обратитесь с одной стороны во многие стороны:

  • Обратитесь к поставщику за счетами в качестве идентификатора.
  • Некоторая базовая информация (например, имя поставщика), которая часто запрашивается в счете-фактуре, может быть частью указанных данных; это будет дублирование данных.


2. Встраивание:

Внедрение нежизнеспособно, так как приложение ориентировано на поставщика (с одной стороны) с большим количеством накладных (много сторон) для внедрения.

2.1. Вложение многих на одной стороне: так как большое количество и быстро растущие многие стороны, это нежизнеспособно. Документ может стать очень большим с большими массивами.

2.2. Встраивание одной стороны во многие стороны: поскольку это приложение, ориентированное на поставщика, оно также нежизнеспособно. Сохранение данных конкретного поставщика в каждом счете-фактуре является проблемой из-за дублирования большого количества счетов-фактур.


Есть идеи?

10000