Выбор правильной DBM-подобной библиотеки C++ для последовательных данных

Я пытаюсь выбрать базу данных для нового разрабатываемого приложения. Вариантов очень много и ошибиться очень легко. Прежде всего, существует требование не использовать серверы баз данных. Необходимая база данных должна быть статической или динамической библиотекой C++. Данные, которые необходимо сохранить, представляют собой массив записей. Они различаются, но являются фиксированными для данного набора данных (поэтому их можно хранить в таблице). Информация в каждой строке может быть от нескольких сотен байт до нескольких мегабайт. И количество строк на данный момент может составлять миллионы и, как ожидается, будет расти.

Индекс строки можно использовать в качестве ключа. Нет необходимости поддерживать отдельный ключевой столбец.

Данные вставляются последовательно. Доступ для чтения будет выполняться только путем последовательного повторения всех данных или некоторого их сегмента (может потребоваться повторение с такими шагами, как каждый 5-й).

  1. Я не думаю, что реляционные БД хороши по многим причинам. а. В основном они серверные. Я знаю о SQLite, но, насколько мне известно, он хранит данные в одном файле, что, как я предполагаю, может привести к проблемам, связанным с максимальным размером файла. б. Нам не нужна мощь, которую предоставляет SQL, вместо этого мы хотели бы иметь больше гибкости в хранимых типах данных.
  2. Существуют базы данных Key/Value, отличные от SQL, такие как BerkeleyDB, RocksDB или что-то вроде luxio для более легких альтернатив. Предоставленного ими функционала более чем достаточно для поставленной задачи. И это может быть правильным выбором, однако я не знаю, насколько хорошо они оптимизированы для такого случая, когда у нас есть непрерывные целочисленные ключи. Доступ с ассоциативным ключом (который нам не требуется) может иметь некоторые накладные расходы на производительность.
  3. Я знаю, что есть некоторые типы баз данных, отличных от SQL, называемые «широкие столбцы», с которыми я не знаком. Тем не менее, название звучит так, как будто оно идеально подходит для нашей задачи. Все базы данных, которые я могу найти, основаны на сервере claud. Если вы знаете dbm-подобную библиотеку для такого типа базы данных, пожалуйста, сообщите. У меня нет опыта работы с базами данных, поэтому, пожалуйста, поправьте меня, если я ошибаюсь в любой из трех вышеперечисленных тычинок.

person ArmanHunanyan    schedule 10.03.2021    source источник


Ответы (1)


Если ваши данные строки могут вырасти до мегабайт, а вы говорите только о миллионах записей, может быть, просто придумать способ разместить их в файловой системе? Если вам нужен индекс, более похожий на базу данных, используйте SQLite для ключей и сделайте так, чтобы записи данных указывали на местоположение в файловой системе. Такого рода вещи будет гораздо быстрее реализовать и сделать правильно, чем пытаться сделать все это в одной гигантской базе данных.

person Mike Andrews    schedule 19.03.2021