2013-06-01 3 views
3

Я занимаюсь разработкой веб-приложений на Java с помощью MongoDB на сервере. У меня есть два объекта базы данных, которые должны иметь списки друг друга. экс-Где хранить списки объектов со ссылками друг на друга?

Объект клиента содержит - List<MediaServer>

Объект MediaService содержит - List<Customer>

1) Должен ли я удалить один из списков, так и та же информация не хранится в двух местах? например Удалите список медиа-серверов. Когда я вытаскиваю клиента, итерация через все медиа-серверы, чтобы выяснить, какие медиа-серверы назначены клиенту.

2) Есть ли лучшее место для хранения этого стиля информации в MongoDB?

Спасибо!

+0

Не можете ли вы сохранить ссылки как список идентификаторов и получить реальные объекты по мере необходимости? Таким образом, нет дубликатов, и их легко получить. –

+0

@NicolasMorel Да, я должен был упомянуть, что список - это просто идентификаторы (dbRefs в MongoDB). Дублирование - это не дублирование объектов, а дублирование отношений, то есть взаимосвязь между клиентом и медиабером в обоих списках. – mkeathley

ответ

1

В MongoDB гораздо более нормальным является то, что данные дублируются в разных местах. Если ваши списки не меняются часто, нет никаких реальных недостатков для хранения обоих списков - пространство на жестком диске в наши дни не дорого, как это было, когда нормализация была полной яростью.

Следует учитывать, что Монго (и при разработке любого приложения) должен выяснить, каковы ваши шаблоны доступа и создать схему на основе частых шаблонов. Если вы регулярно читаете эти списки, но не обновляете их очень сильно, то наличие обоих списков в БД будет в порядке.

Если, однако, вы часто меняете оба списка, вы можете обновлять данные в двух местах каждый раз.

Однако вы также должны помнить, что если вы храните списки идентификаторов, когда вы хотите получить полный объект/документ для этого идентификатора, для этого потребуется обратная поездка на сервер. Поэтому, если для каждого клиента (например) вам всегда нужна вся информация обо всех MediaServers, вам нужно будет совершить поездку по сети для каждого из идентификаторов MediaServer в вашем списке для этого клиента.

0

Предлагаю вам использовать Soft References для одного вида списков и регулярных ссылок для другого. В качестве альтернативы, если существование записей клиента и сервера «подключено» к другим объектам реферирования, возможно, оба типа списков должны содержать мягкие ссылки.

Слабые ссылки также могут быть рассмотрены. Если использование памяти является проблемой. См. What is the difference between a soft reference and a weak reference in Java? об этом.

PS - Мое предложение не имеет ничего общего с тем фактом, что ваши объекты происходят из MongoDB или любого другого типа базы данных.