Będąc jednym z najpopularniejszych rozwiązań NoSQL, MongoDB ma większość zalet tego podejścia. Ale jednym problemem, z którym wciąż walczę, jest to, jak odzwierciedlają relacje między obiektami w magazynie danych NoSQL, a konkretnie - MongoDB.Symulowanie relacji w MongoDB
Na przykład rozważmy prosty model danych: użytkownik, post i komentarz. Jest dla mnie jasne, że komentarze nie mają wartości na własną rękę, a tym samym stają się obiektami osadzonymi na posty. Ale jeśli chodzi o użytkowników - staje się to trudne, ponieważ Użytkownik jest jednostką samą w sobie, nie sprzężoną z Post. Teraz na wypadek, gdyby trzeba było wysyłać posty z pełnymi nazwiskami użytkowników i linkami do profili na stronie internetowej, musiałbym mieć listę postów i informacji o autorze postów (przynajmniej imię i nazwisko).
widzę 2 możliwe rozwiązania tutaj:
- De-normalizacji danych w taki sposób, że każdy wpis post zawiera identyfikator jego autora oraz imię i nazwisko (i każdy inny użytkownik przypisuje mogę potrzebować podczas dodawania postów). W ten sposób wysyłanie zapytań o dane byłoby naprawdę proste, ale jeśli użytkownik zaktualizuje swój profil, będę musiał zaktualizować wszystkie posty również przez użytkownika. Ale muszę też przechowywać atrybuty użytkownika w obiektach komentarzy, co oznacza, że aktualizowanie profilu użytkownika zasadniczo wymaga aktualizacji wszystkich wpisów, które mają przynajmniej jeden komentarz użytkownika, chyba że chcę przechowywać komentarze w osobnych kolekcjach.
- Przechowuj tylko identyfikator użytkownika w obiekcie postu i wykonaj 2 zapytania: jeden, aby wyświetlić listę wpisów, a drugi, aby wyświetlić listę użytkowników, których identyfikator użytkownika znajduje się na liście autorów postów. Wymaga to 2 zapytań i dodatkowego przetwarzania w moim kodzie aplikacji, aby zmapować użytkowników do postów.
Jestem pewna, że nie jestem pierwszą osobą, która stoi w obliczu tego problemu, ale niestety nie znalazłem żadnych najlepszych praktyk na ten temat do tej pory. Opinie?
Z którym schematem metody korzystałeś? rozwiązanie 1? lub rozwiązanie 2? – koeder
Jest to dość dobrze opisane w odpowiedzi TTT - w zależności od tego, czego potrzebujesz od danych, musisz wybrać. Mam oba podejścia wdrożone w mojej aplikacji. –
Po prostu ciekawa, jak ci się podoba mongotb? Jak twoje doświadczenie używało Mongo? – koeder