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 № 1Jeś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.