Mam trudności z przechowywaniem setek milionów par klucz/wartość 16/32 bajtów z tablicą asocjacyjną na moim dysku SSD.Kyoto Cabinet/Berkeley DB: Ograniczenia wielkości tablicy Hash
Z szafką z Kyoto: Gdy działa poprawnie, wkłada 70000 rekordów na sekundę. Gdy spadnie, spada do 10-500 rekordów/s. Przy domyślnych ustawieniach spadek następuje po około milionie rekordów. Patrząc na dokumentację, jest to domyślna liczba segmentów w tablicy, więc ma to sens. Zwiększyłem tę liczbę do 25 milionów i rzeczywiście działa dobrze do około 25 milionów rekordów. Problem polega na tym, że jak tylko zwiększę liczbę wiaderek do 30 milionów lub więcej, od początku tempo wstawiania spadnie do 10-500 rekordów/s. Gabinet Kyoto nie jest przeznaczony do zwiększania liczby segmentów po utworzeniu bazy danych, więc nie mogę wstawić więcej niż 25 milionów rekordów.
1/Dlaczego współczynnik wstawiania KC byłby bardzo niski, gdy liczba wiaderek przekroczy 25M?
Z Berkeley DB: Najlepsza prędkość mam jest nieco niższy niż KC, bliżej rekordu 50000/s, ale nadal OK. Przy ustawieniach domyślnych, podobnie jak w przypadku KC, prędkość spada nagle po około milionach rekordów. Wiem, że BDB ma na celu stopniowe zwiększanie liczby wiaderek. Niezależnie od tego, próbował zwiększyć początkowy numer, grając z HashNumElements i FillFactor, ale każda z tych prób pogorszyła sytuację. Wciąż nie mogę wstawić ponad 1-2 milionów rekordów za pomocą DBD. Próbowałem aktywować niezsynchronizowane transakcje, wypróbowałem różne stawki punktów kontrolnych, zwiększono pamięci podręczne. Nic nie poprawia upuszczania.
2/Co może spowodować spadek liczby płytek BDB po 1-2 milionach wstawek?
Uwaga: Pracuję z java, a gdy prędkość spada, użycie procesora obniża się do 0-30%, a na 100% podczas pracy przy prawidłowej prędkości.
Uwaga: Zatrzymanie procesu i wznowienie wstawiania nic nie zmienia. Więc nie sądzę, że jest to związane z limitami pamięci lub zbieraniem śmieci.
Thx.
Jak wygląda Twoje środowisko BDB? czy korzystasz z transakcji, replikacji itp.? Czy możesz też opublikować przykładowy kod? –
Jego aktualny stan to: [pastebin.com/bWJpbipZ](http://pastebin.com/bWJpbipZ). Wkładam z 'database.put (transaction, k, v)', czytam z 'database.get (transaction, k, v, LockMode.DEFAULT)', a checkpoint co 500000 insertów z 'environment.checkpoint (null)'. –