2011-12-22 14 views
8

Szukam narzędzia do uzyskania godnej oszacowanie jak duży indeks MongoDB będzie opierać się na kilku sygnałów, takich jak:Czy są jakieś narzędzia do oszacowania wielkości indeksu w MongoDB?

  • Ile dokumentów w mojej kolekcji
  • wielkości pola indeksowanego (s)
  • wielkość _id używam jeśli nie objectID
  • Geo/Non-geo

czy ktoś natknął się na coś takiego? Mogę sobie wyobrazić, że byłoby to niezwykle użyteczne, biorąc pod uwagę spadek wydajności Mongo, gdy trafi on w ścianę pamięci i dokumenty zaczną być stronicowane na dysk. Jeśli mam działającą bazę danych i chcę dodać kolejny indeks, jedyny sposób, jaki będę wiedzieć, czy będzie zbyt duży, to dodanie go.

Nie musi być dokładny, ale z pewnymi założeniami dotyczącymi B-Drzew i implementacji indeksu, jestem pewien, że może być wystarczająco rozsądny, aby być pomocnym.

Jeśli to już nie istnieje, chciałbym je skompilować i otworzyć, więc jeśli pominięte zostały jakiekolwiek parametry wymagane do tego obliczenia, proszę podać w odpowiedzi.

+0

Może się okazać, że zbiegnie się twoje narzędzie (aby wypełnić lukę w międzyczasie) z prośbą o wbudowane narzędzie od zespołu MongoDB. –

+0

Czy rzeczywiście skończyłeś pisać narzędzie do tego? – Stennie

+0

Zrobiłem, jednak wyniki były mniej niż zadowalające. Podczas testowania z rzeczywistymi danymi z istniejącymi indeksami do porównania, moje narzędzie przewiduje, że rozmiary indeksu będą nieco mniejsze niż dwa razy rzeczywiste rozmiary. Sprawdzam, czy jest to błąd w moim kodzie, czy też formuła jest po prostu * bardzo * trudna. Zaktualizuje się tutaj, gdy dowiem się więcej. – jpredham

Odpowiedz

21

Właśnie rozmawiałem z kilkoma inżynierami 10gen i nie jest narzędziem, ale można zrobić tył obliczania obwiedni, który opiera się na tym wzorze:

2 * [n * (18 bajtów napowietrznych + średni rozmiar indeksowanego pola + 5 bajtów współczynnika konwersji współczynnika krówki)]

Gdzie n jest liczbą dokumentów, które posiadasz.

Napowietrzne i dopełniające są specyficzne dla mongo, ale 2x pochodzi ze struktury danych b-tree, która jest w przybliżeniu w połowie pełna (ale przydziela 100% przestrzeni, której wymaga pełne drzewo) w najgorszym przypadku.

Chciałbym wyjaśnić więcej, ale w tej chwili sam się o tym uczę. Ta prezentacja będzie miała więcej szczegółów: http://www.10gen.com/presentations/mongosp-2011/mongodb-internals

+3

Może on stworzyć kalkulator online :-) –

+1

to jest naprawdę wspaniałe dzięki – jpredham

+0

Przepraszamy, musisz ponownie otworzyć to pytanie. Obliczając średni rozmiar pola z reprezentatywnej liczby dokumentów i podłączając go do wymienionego równania, otrzymuję wielkości indeksu z grubsza dwa razy większą od rzeczywistej wartości. Ta teoria ma dla mnie sens, ale w praktyce, w oparciu o to, co i tak raportuje muszla mongo, nie jest to poprawne. – jpredham

1

Innym sposobem obliczenia jest łykać ~ 1000 lub więcej dokumentów do każdej kolekcji, innymi słowy, zbuduj model w małej skali, który zakończy się produkcją, utwórz indeksy lub co masz i obliczyć ostateczne liczby na podstawie średniej z db.collection.stats().

Czy to ma sens? :)

Powiązane problemy