it-swarm.dev

Pamięć limitów MongoDB

Używam mongo do przechowywania plików dziennika. Zarówno mongoDB, jak i mysql działają na tej samej maszynie, wirtualizacja mongo env nie jest opcją. Obawiam się, że niedługo wpadnę na problemy, ponieważ tabela dzienników rośnie bardzo szybko. Czy istnieje sposób ograniczenia pamięci rezydentnej dla mongo, aby nie zjadła całej dostępnej pamięci i nadmiernie spowolniła działanie serwera mysql?

Maszyna DB: Debian 'lenny' 5

Inne rozwiązania (proszę o komentarz):

  • Ponieważ potrzebujemy wszystkich danych historycznych, nie możemy korzystać z kolekcji ograniczonych, ale rozważam także użycie skryptu cron, który zrzuca i usuwa stare dane

  • Czy powinienem rozważyć użycie mniejszych kluczy, jak sugerowano na innych forach?

19
Vlad Zloteanu

Hej, Wład, masz tutaj kilka prostych strategii dotyczących dzienników.

Pierwszą rzeczą, którą należy wiedzieć, jest to, że Mongo może zazwyczaj obsługiwać wiele kolejnych wkładek bez dużej ilości pamięci RAM. Powód tego jest prosty, wstawiasz lub aktualizujesz tylko najnowsze rzeczy. Tak więc rozmiar indeksu rośnie, ale dane będą stale wysyłane.

Innymi słowy, możesz podzielić użycie RAM na dwie główne części: indeks i dane.

Jeśli używasz typowego rejestrowania, część danych jest stale usuwana, więc tylko indeks naprawdę pozostaje w pamięci RAM.

Drugą rzeczą, którą należy wiedzieć, jest to, że można złagodzić problem indeksu, umieszczając logi w mniejszych wiadrach. Pomyśl o tym w ten sposób. Jeśli zbierzesz wszystkie dzienniki w zbiorze opatrzonym datą (nazwij go logs20101206), możesz także kontrolować rozmiar indeksu w pamięci RAM.

W miarę upływu dni stary indeks zniknie z RAM i nie będzie dostępny ponownie, więc po prostu zniknie.

ale rozważam także użycie skryptu cron, który zrzuca i usuwa stare dane

Ta metoda rejestrowania według dni pomaga również usuwać stare dane. W ciągu trzech miesięcy od ukończenia pracy po prostu wykonujesz funkcję db.logs20101206.drop(), a kolekcja natychmiast znika. Zauważ, że nie odzyskujesz miejsca na dysku (wszystko jest wstępnie przydzielone), ale nowe dane wypełnią puste miejsce.

Czy powinienem rozważyć użycie mniejszych kluczy, jak sugerowano na innych forach?

Tak.

W rzeczywistości mam to wbudowane w moje obiekty danych. Uzyskuję więc dostęp do danych za pomocą logs.action lub logs->action, ale poniżej dane są zapisywane w logs.a. Naprawdę łatwo jest spędzić więcej miejsca na „polach” niż na „wartościach”, więc warto zmniejszać „pola” i próbować je odciągać gdzie indziej.

13
Gates VP

W wersji 3.2+, która używa silnika wiredTiger, opcja --wiredTigerCacheSizeGB jest odpowiednia dla pytania. Możesz to ustawić, jeśli wiesz, co dokładnie robisz. Nie wiem, czy to najlepsza praktyka, po prostu przeczytaj z document i podnieś go tutaj.

1
pu.guan

Dla Windowsa wydaje się możliwe kontrolowanie ilości pamięci używanej przez MongoDB, zobacz ten samouczek u kapitana Codemana:

Ogranicz wykorzystanie pamięci MongoDB w systemie Windows bez wirtualizacji

0
Kdeveloper