Mamy kolekcję danych dziennika, gdzie każdy dokument w kolekcji jest identyfikowany przez adres MAC i dzień kalendarzowy. Zasadniczo:W MongoDB, strategia zwiększania wydajności zapisów do dzienników dzienników
{
_id: <generated>,
mac: <string>,
day: <date>,
data: [ "value1", "value2" ]
}
Co pięć minut dołączamy nowy wpis dziennika do tablicy danych w dokumencie bieżącego dnia. Dokument przewija się o północy UTC, kiedy tworzymy nowy dokument dla każdego adresu MAC.
Zauważyliśmy, że IO, mierzone bajtami, zwiększa się przez cały dzień, a następnie spada z powrotem o północy UTC. Nie powinno się tak stać, ponieważ szybkość komunikatów dziennika jest stała. Uważamy, że nieoczekiwane zachowanie jest spowodowane przenoszeniem dokumentów Mongo, w przeciwieństwie do aktualizowania ich tablic rejestracyjnych w miejscu. O ile warto, stats()
pokazuje, że paddingFactor ma wartość 1.0299999997858227.
Kilka pytań:
- Czy istnieje sposób, aby potwierdzić czy Mongo jest uaktualnienie na miejscu lub w ruchu? Widzimy pewne ruchy w dzienniku powolnego zapytania, ale wydaje się to niepotwierdzonym dowodem. Wiem, że mogę
db.setProfilingLevel(2)
, a następniedb.system.profile.find()
, a na koniec szukać"moved:true"
, ale nie jestem pewien, czy można to zrobić w zajętym systemie produkcyjnym. - Rozmiar każdego dokumentu jest bardzo przewidywalny i regularny. Zakładając, że Mongo wykonuje wiele ruchów, jaki jest najlepszy sposób, aby się domyślić, dlaczego Mongo nie jest w stanie przewidzieć dokładniej? A może sprawić, by Mongo było bardziej precyzyjne? Zakładając, że powyższy opis problemu jest właściwy, poprawianie współczynnika dopełnienia nie wydaje się, aby to działało.
- To powinno być łatwe dla mnie, aby zatwierdzić dokument i usunąć domysły z Mongo. (Wiem, że doktorzy padding factor mówią, że nie powinienem tego robić, ale muszę po prostu zająć się tą kwestią.) Jaki jest najlepszy sposób na upominanie dokumentu? Wydaje się proste napisanie dokumentu z polem tablicy bajtów śmieci, a następnie natychmiastowe usunięcie tego pola z dokumentu, ale czy są jakieś błędy, o których powinienem wiedzieć? Na przykład, mogę sobie wyobrazić, że muszę czekać na serwerze na operację zapisu (to znaczy zrobić bezpieczny zapis) przed usunięciem pola śmieci.
- Byłem zaniepokojony wcześniejszym przydzieleniem wszystkich dokumentów dnia w tym samym czasie, ponieważ wydaje się, że to nasyciłoby dysk w tym czasie. Czy to jest ważny problem? Czy powinienem starać się rozłożyć koszty przedpłaty na poprzedni dzień?
Scott Hernandez odpowiedział na to pytanie w grupie dyskusyjnej Google, a więc publikuję listę odpowiadającą jego odpowiedzi: http://groups.google.com/group/mongodb-user/browse_thread/thread/8a24e7f3faf95f71# – jtoberon
Ostatnia aktualizacja: wciąż próbujemy zrozumieć, co się dzieje. – jtoberon