/ / Czy MongoDB powiela dokument podrzędny z identycznymi danymi? - java, mongodb, orm, jdo, dokument podrzędny

Czy MongoDB duplikuje subdokument z identycznymi danymi? - java, mongodb, orm, jdo, subdokument

Jestem zupełnie nowy w MongoDB i patrzę naprzeniesienie mojego podstawowego kodu trwałości (dla wielu projektów) do niego przy użyciu JDO jako warstwy agnostycznej. Zadaję to pytanie z perspektywy programisty Java, który lubi pracować z fasolą jako podstawową jednostką modelu.

Moje pytanie dotyczy dokumentów podrzędnych i tego, czy istnieją one niezależnie, czy są wewnętrznie konsolidowane przez MongoDB. tzn. gdybym miał taką strukturę domeny:

Gospodarstwo domowe - zbiór osób

Person
- name
- address

Address
- street
- postcode

Gdybym miał dokument dla gospodarstwa domowego, miałby on wiele Osób, ale każda Osoba miałaby ten sam adres.

Czy każdy adres byłby odrębny i osobnyencja w MongoDB (mimo że są one tej samej „klasy” i mają te same wartości. Czy też Mongo w jakiś sposób stwierdza, że ​​odnoszą się do tej samej encji i wewnętrznie przechowują UID dla każdego adresu?

Co ważniejsze Jeśli zaktualizuję kod pocztowy dla jednego adresu, czy to oznacza, że ​​każdy członek dokumentu podrzędnego adresu gospodarstwa domowego odzwierciedla tę zmianę?

Wydaje się, że jeśli tak, to błąka się w sferę relacyjną, ale bez takiego odniesienia widzę okropne nieefektywności?

Odpowiedzi:

1 dla odpowiedzi № 1

Jeśli utrwalasz dane przez JDO, masz wybórosadzanie osoby + adresu w gospodarstwie domowym lub utrwalanie jako pojedyncze obiekty (tak jak w przypadku RDBMS). Jeśli przechowujesz jako niewbudowane, to od Ciebie zależy, czy masz wiele kopii tej samej Osoby, czy jedną, o której wspomina wiele Gospodarstw Domowych. Jeśli są przechowywane jako osadzone, są one osadzane, więc stanowią część gospodarstwa domowego, dlatego informacje są duplikowane.


0 dla odpowiedzi nr 2

Mongo nie będzie deduplikować tych dokumentów podrzędnychty nie. Jeśli chcesz znormalizować te dane, musisz zapisać te adresy w innej kolekcji (najlepiej) i przechowywać DBRefy w tych dokumentach podczas zapisywania załączonych dokumentów. Użycie czegoś takiego jak morphia lub spring-data może pomóc w zarządzaniu tymi referencjami dla Was.