Нереляционные базы данных для C++

Я думал о запуске проекта, который очень нуждается в постоянном магазине. Я собирался неохотно выбрать СУБД, когда наткнулся на статью, в которой кратко упоминается CouchDB. Кажется, что некоторые усовершенствования в технологии БД произошли с тех пор, как я в последний раз смотрел, поэтому я подумал, что я спрошу здесь о базах данных, прежде чем я в них войду.

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

  1. Проект с открытым исходным кодом, и я не буду ничего просить за него, поэтому предпочтительно база данных с открытым исходным кодом и бесплатно. Кроме того, программное обеспечение должно работать как на Linux, так и на Windows.

  2. Есть части проекта, которые должны быть в C++. Проект не достаточно большой код, чтобы оправдать использование второго языка. Так что в основном все это будет C++.

  3. Этот проект не будет иметь ничего общего с сетью, поэтому предпочтительно, чтобы база данных не требовала детрита веб-библиотеки.

  4. Объекты, которые я хочу сохранить, попадают в одну из двух категорий: базовый объект и контейнерный объект. Разница в том, что объекты, которые являются контейнерами, будут содержать еще больше объектов, то есть: проблема частей частей. Мне нужна база данных, которая может обрабатывать такие случаи чисто и эффективно.

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

  6. Чтобы приложение работало должным образом, люди должны были обмениваться большими кусками базы данных друг с другом. Поэтому я хотел бы иметь простые способы импорта и экспорта данных, которые я мог бы автоматизировать до некоторой степени.

  7. Наконец, было бы неплохо, если бы база данных могла быть каким-то образом смоделирована в модульных тестах.

Это мои требования. Я воспроизвел их ниже, чтобы людям было легче отвечать.

Спасибо

Нетехнические требования 1. Открытый код желательно бесплатный. 2. Запустите на Windows и Linux

  1. Имеет интерфейс C++.
  2. Может обрабатывать не веб-приложения, желательно без REST.
  3. Может справиться с проблемой "частей частей" довольно хорошо.
  4. Может обрабатывать несколько индексов.
  5. Имеет своего рода концепцию версии схемы, может обрабатывать несколько версий схемы и может переносить таблицы из одной схемы в другую.
  6. Должен иметь простой механизм для перемещения данных из одного экземпляра базы данных в другой.
  7. Предпочтительно имеет какой-то механизм для тестирования.

2 ответа

HDF5 - это двоичный формат, который ведет себя как иерархическая база данных. У него есть привязка и библиотеки для C++ и python (я использую только последний), и он используется для хранения больших объемов данных, как те, которые создаются в некоторых физических и астрономических экспериментах.

http://www.hdfgroup.org/HDF5/

Некоторое время назад я просмотрел несколько баз данных nosql (у них было иное требование, чем у вас - нужно было, чтобы он был автономным сервером). Те, что я помню как особенно интересные, - это Redis и Kyoto Cabinets. Посмотри.

Кстати, вы не упоминаете никаких требований к производительности. Если это так, вы рассматривали SQLite? Простой, встроенный, стабильный и, в конце концов, с гибкостью SQL. С подготовленным оператором потеря производительности SQL не должна быть очень высокой.

РЕДАКТИРОВАТЬ: ooops, только что заметил, что вы спросили об этом больше года назад... Ну, возможно, вы можете сказать нам, что вы выбрали:)

Другие вопросы по тегам