Z dokumentów osadzonych należy korzystać, jeśli są to dokumenty statyczne lub nie więcej niż kilkaset ze względu na wpływ na wydajność. Omówiłem ten problem już jakiś czas temu. Niedawno Asya Kamsky, która pracuje jako architekt rozwiązań dla MongoDB, napisała artykuł o „używaniu subdokumentów”.
Mam nadzieję, że pomoże to komuś, kto szuka rozwiązań lub najlepszych praktyk.
Przede wszystkim musimy zastanowić się, dlaczego mielibyśmy chcieć coś takiego zrobić. Zwykle radziłbym ludziom osadzać rzeczy, które zawsze chcą odzyskać, gdy pobierają ten dokument. Drugą stroną tego jest to, że nie chcesz osadzać w dokumencie rzeczy, których nie chcesz odzyskać.
Jeśli umieścisz w dokumencie aktywność, którą wykonuję, na początku będzie ona działać świetnie, ponieważ cała moja aktywność jest właśnie tam, a po jednym przeczytaniu możesz odzyskać wszystko, co chcesz mi pokazać: „ostatnio kliknąłeś to i tutaj czy twoje ostatnie dwa komentarze ”, ale co się dzieje po sześciu miesiącach i nie obchodzą mnie rzeczy, które zrobiłem dawno temu i nie chcesz mi ich pokazywać, chyba że specjalnie poszukam jakiejś starej aktywności?
Po pierwsze, w końcu będziesz zwracać coraz większy dokument i dbać o coraz mniejszą jego część. Ale możesz użyć projekcji, aby zwrócić tylko część tablicy, prawdziwym problemem jest to, że dokument na dysku stanie się większy i nadal będzie czytany, nawet jeśli zamierzasz zwrócić tylko część tego użytkownikowi końcowemu, ale ponieważ moja działalność nie ustanie tak długo, jak długo będę aktywny, dokument będzie się rozrastał.
Najbardziej oczywistym problemem jest to, że w końcu osiągniesz limit 16 MB dokumentów, ale wcale nie powinieneś się tym martwić. Dokument, który stale rośnie, będzie generował coraz wyższe koszty za każdym razem, gdy będzie musiał zostać przeniesiony na dysk, a nawet jeśli podejmiesz kroki w celu złagodzenia skutków fragmentacji, twoje zapisy będą ogólnie niepotrzebnie długie, wpływając na ogólną wydajność całej aplikacji.
Jest jeszcze jedna rzecz, którą możesz zrobić, która całkowicie zniszczy wydajność aplikacji, a jest to indeksowanie tej stale rosnącej tablicy. Oznacza to, że za każdym razem, gdy dokument z tą tablicą jest przenoszony, liczba pozycji indeksu, które wymagają aktualizacji, jest wprost proporcjonalna do liczby indeksowanych wartości w tym dokumencie, a im większa tablica, tym większa będzie ta liczba. być.
Nie chcę, aby to odstraszyło Cię przed używaniem tablic, gdy są one dobrze dopasowane do modelu danych - są potężną funkcją modelu danych bazy danych dokumentów, ale podobnie jak wszystkie potężne narzędzia muszą być używane w odpowiednich okolicznościach i należy go używać ostrożnie.