Поиск простого в использовании встроенного значения ключа хранит для C++

Я должен записать приложение C++, которое читает и пишет большие объемы данных (больше, чем доступная RAM), но всегда последовательным способом.

Для удержания данных соответствующее требованиям завтрашнего дня и легкое для документирования пути, я использую Буфер Протокола. Буфер протокола однако не обрабатывает большие объемы данных.

Мое предыдущее решение состояло при создании одного файла на блок данных (и сохраните их всех в одном каталоге), но это кажется не особенно масштабируемым.

На этот раз я хотел бы попытаться использовать встроенную базу данных. Чтобы иметь схожую функциональность, я только должен сохранить ключ->, оценивает ассоциации (таким образом sqlite, кажется излишеством). Значения будут двоичным выводом сериализации от Буфера Протокола.

Я ожидаю, что база данных справится, "что сохранить в памяти, что переместиться в дисковую проблему" asp, "как эффективно сохранить большой объем данных по диску" проблема, и идеально, для оптимизации моих последовательных шаблонов чтения (путем чтения заранее следующих записей).

Поиск альтернатив я был удивлен от отсутствия альтернатив. Я не хочу сохранять базу данных в отдельном процессе, потому что мне не нужно это разделение (это исключает советы).

Единственной опцией, которую я нашел, был Беркли DB, но это имеет неприятный низкоуровневый C API. Затем наилучшим вариантом, который я нашел, был stldb4 сверху Беркли DB. API кажется довольно хорошим и соответствует моим потребностям.

Однако я волнуюсь. stldb4 кажется странным (он имеет зависимости от материала libferris), несохраняемое решение (последний выпуск один год назад), для проблемы, которую я имел бы, хотя быть довольно распространенным.

У какого-либо из Вас есть лучшее предложение о том, как управлять этой проблемой?

Спасибо за Ваши ответы.

7
задан rodrigob 23 July 2010 в 13:55
поделиться

2 ответа

Думаю, я нашел ответ на свою проблему.

Я не заметил, что Berkeley DB предоставляет два API для C ++:

  • ванильный C-подобный API
  • и STL API

Этот STL API предоставляет STL-совместимые векторы и абстракции карты, которые предоставляют прямой доступ к базе данных. Таким образом становится возможным выполнение value = data_container [key] .

Это кажется мне лучшим решением; используя Berkeley DB STL API напрямую вместе с буферами протокола.

5
ответ дан 7 December 2019 в 05:16
поделиться

BerkleyDB , кажется, соответствует вашим потребностям. Конечно, его API немного неудобен, но если вы предпочитаете хороший API, SQLite может быть лучшим решением, хотя я думаю, что его производительность может быть не такой хорошей.

1
ответ дан 7 December 2019 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: