Zastanawiam się nad idealną strukturą dokumentu dla maksymalnej wydajności zapytań dla różnych sytuacji i jest jedna, o którą chcę zapytać. To naprawdę wynikało ze mnie, nie bardzo wiedząc, jak MongoDB zachowuje się w pamięci w tym szczególnym przypadku. Podam hipotetyczny scenariusz.Co to jest dobra struktura dokumentów MongoDB do najskuteczniejszych zapytań użytkowników/followeesów?
Wyobraź sobie system obserwatorów i Followees w stylu Twitter. Po pobieżnym spojrzeniem wprawdzie, główne opcje wydają się być:
W każdym dokumencie użytkownika, „wyznawcy” tablica zawierająca odnośniki do wszystkich dokumentów z innymi użytkownikami one nastąpią. Followees można znaleźć, znajdując naszego obecnego użytkownika w tablicy "user.followers" innych użytkowników. Główną wadą wydaje się być potencjalne obciążenie zapytania wyszukiwania Followee. Ponadto, w przypadku zapytania dotyczącego zawartości "user.followers", MongoDB po prostu uzyskuje dostęp do wymaganego pola w dokumentach użytkowników lub odnaleziono cały dokument użytkownika, a następnie odczytywane są wymagane wartości pól i są one buforowane/przechowywane w taki sposób, że zapytanie w dużej bazie użytkowników wymagałoby znacznie więcej pamięci?
W każdym dokumencie użytkownika, przechowującym zarówno "obserwatorów" i "followees" dla szybszego dostępu do każdego. To oczywiście ma wadę duplikatów danych w tym sensie, że wpis dla użytkownika A następujący użytkownik B istnieje w obu dokumentach użytkownika w odpowiednim polu, a usunięcie z od wymaga dopasowania usunięcia w drugim. Z technicznego punktu widzenia może to oznaczać podwojenie liczby punktów potencjalnego niepowodzenia w przypadku zwykłego usunięcia. A czy MongoDB nadal cierpi z powodu tego, co usłyszałem, określanego jako "szwajcarskie cheesing" z jego danych przechowywanych w pamięci, kiedy pojawiają się skreślenia, a zatem usunięcie z 2 pól zamiast 1 podwaja efekt tego problemu z dziurami pamięci?
Osobna kolekcja do przechowywania informacji o użytkownikach, w podobny sposób odpowiadająca dokumentom użytkownika w punkcie 1, z wyjątkiem tego, że oczywiste jest, że jedynymi dostępnymi danymi są Obserwatorzy, więc jeśli dokumenty użytkownika zawierają sporo innych danych związanych z każdego użytkownika, unikamy dostępu do tych danych. Wydaje się, że ma to coś z relacyjnej bazy danych i chociaż wiem, że nie zawsze jest to straszne podejście, z zasady, oczywiście jeśli jedno z innych podejść wymienionych (lub jedno, którego nie rozważałem) jest lepsze w architekturze Mongo "Chciałbym się uczyć!
Jeśli ktoś ma jakieś przemyślenia na temat tego, czy chce mi powiedzieć Tęskniłam bardzo istotne i oczywiste stronę docs i gdzieś, a nawet chce mi powiedzieć, że jestem po prostu głupi (myślał o wyjaśnienie, dlaczego, proszę;)) Chciałbym usłyszeć od ciebie!
Jakiego języka programowania będziesz używać? W zależności od tego, istnieją pewne funkcje, które mogą być obsługiwane przez sterownik podstawowy. W szczególności mówię o DBRefs. http://docs.mongodb.org/manual/applications/database-references/ –
To dobra uwaga, dzięki. Moglibyśmy w końcu użyć czegokolwiek, ale obecnie jest to połączenie PHP i Node.js. – tdous