Мне нужно написать приложение на C ++, которое считывает и записывает большие объемы данных (больше, чем объем доступной оперативной памяти), но всегда последовательно.
Чтобы сохранить данные в будущем и легко документировать их, я использую Protocol Buffer. Однако буфер протокола не обрабатывает большие объемы данных.
Мое предыдущее решение состояло в том, чтобы создать один файл на единицу данных (и сохранить их все в одном каталоге), но это, кажется, не особенно масштабируемо.
На этот раз я хотел бы попробовать использовать встроенную базу данных. Чтобы иметь подобную функциональность, мне нужно только хранить ассоциации ключ-> значения (таким образом, sqlite кажется излишним). Значения будут двоичными выходными данными сериализации из буфера протокола.
Я ожидаю, что база данных решит проблему "что хранить в памяти, что перенести на диск asp", проблему "как эффективно хранить большой объем данных на диске" и в идеале оптимизировать мои шаблоны последовательного чтения (читая заранее следующие записи).
В поисках альтернатив я был удивлен отсутствием альтернатив. Я не хочу хранить базу данных в отдельном процессе, потому что мне не нужно это разделение (это исключает повторное использование).
Единственный вариант, который я нашел, - это Berkeley DB, но у него неприятный низкий уровень C. api. Тогда лучшим вариантом, который я нашел, был stldb4 поверх Berkeley DB. API выглядит довольно хорошо и соответствует моим потребностям.
Однако я волнуюсь. stldb4 кажется странным (оно зависит от содержимого libferris), не поддерживаемым решением (последний выпуск год назад) для проблемы, которая у меня, хотя и была бы довольно распространенной.
У кого-нибудь из вас есть лучшее предложение о том, как решить эту проблему?
Спасибо за ваши ответы.