Wygląda na to, że dzielenie bazy danych jest świetne, jeśli mam ogromne zbiory. Co się stanie, jeśli będę mieć dużo kolekcji dość dużych rozmiarów? Powiedzmy, że dla 1 zbioru 100 000 000 dokumentów (niezbyt dużych komentarzy) dzielenie na fragmenty jest skuteczne. Czy działa również w przypadku 10 000 kolekcji zawierających po 10 000 dokumentów?
(Myślę, że to pytanie jest nadal aktualne dla baz danych zorientowanych na tabelę, jeśli zastąpisz kolekcje tabelami i dokumenty wierszami. Jeśli to możliwe, chciałbym poznać teoretyczną odpowiedź, a także odpowiedź w konkretnym scenariuszu MongoDB, jeśli jest inny niż teoretyczny odpowiedź.)
foo
ibar
o tej samej strukturze danych, można połączyć je wbaz
kolekcji i zastąpić_ids
(w kodzie){ _id: "foo123" }, { _id: "bar123" }
. Masz większy indeks, ale masz tylko jeden indeks, który obejmuje ten typ. Nie jest to wymóg, tylko „jedzenie do namysłu”.Sharding MongoDB polega na dzieleniu kolekcji na mniejsze „fragmenty” i równomierne rozprowadzanie ich na wielu komputerach. Domyślny rozmiar porcji, który jest na ogół najbardziej wydajny, to 200 MB. Więc jeśli kolekcja nie wzrośnie znacznie powyżej 200 MB, nie podzieli się na części i dlatego nie będzie się kwalifikować do dzielenia na fragmenty, więc nie będzie żadnych korzyści.
W ogólnym przypadku dzielenie danych na wielu komputerach jest bardzo skutecznym sposobem skalowania odczytów, zapisów i zapytań. Korzystasz z wielu procesorów, dysków twardych i pamięci, pracując równolegle do odczytu, zapisu i przetwarzania danych. Skalowanie pamięci jest szczególnie ważne w MongoDB, gdzie wysoka wydajność jest bardzo wrażliwa na dopasowanie danych do pamięci.
źródło