Potrzebuję napisać aplikację C++, która odczytuje i zapisuje duże ilości danych (więcej niż dostępna pamięć RAM), ale zawsze w sekwencyjny sposób.Szukasz łatwego w użyciu osadzonego magazynu wartości klucz-wartość dla C++
Aby zachować dane w przyszłym i łatwym do udokumentowania sposób, używam bufora protokołów. Bufor protokołu nie obsługuje jednak dużych ilości danych.
Moje poprzednie rozwiązanie polegało na utworzeniu jednego pliku na jednostkę danych (i zapisaniu ich wszystkich w jednym katalogu), ale nie jest to szczególnie skalowalne.
Tym razem chciałbym spróbować użyć wbudowanej bazy danych. Aby mieć podobną funkcjonalność, wystarczy przechowywać odwołania do kluczy-> wartości (stąd sqlite wydaje się przesadą). Wartości będą wynikiem serializacji binarnej z bufora protokołów.
Oczekuję, że baza danych będzie zarządzać kwestią "co zachować w pamięci, co przenieść do dysku", "jak skutecznie przechowywać dużą ilość danych na dysku", a najlepiej, aby zoptymalizować mój sekwencyjny odczyt wzorce (czytając przed ręką kolejne wpisy).
Wyszukiwanie alternatyw Byłem zaskoczony brakiem alternatyw. Nie chcę przechowywać bazy danych w oddzielnym procesie, ponieważ nie potrzebuję tego oddzielenia (to wyklucza ponowne).
Jedyna dostępna opcja to Berkeley DB, ale ma nieprzyjemny niski poziom C api. Najlepszą opcją, jaką znalazłem, było stldb4 na szczycie Berkeley DB. Interfejs API wydaje się całkiem niezły i pasuje do moich potrzeb.
Jednak się martwię. stldb4 wydaje się dziwne (ma zależności od rzeczy libferris), rozwiązanie niezamieszkane (ostatnie wydanie rok temu), dla problemu, który musiałbym być dość powszechny.
Czy ktoś z was ma lepsze sugestie dotyczące zarządzania tym problemem?
Dzięki za odpowiedzi.