Нереляционные базы данных для C++
Я думал о запуске проекта, который очень нуждается в постоянном магазине. Я собирался неохотно выбрать СУБД, когда наткнулся на статью, в которой кратко упоминается CouchDB. Кажется, что некоторые усовершенствования в технологии БД произошли с тех пор, как я в последний раз смотрел, поэтому я подумал, что я спрошу здесь о базах данных, прежде чем я в них войду.
Вот мои критерии. (В конце я снова перечисляю критерии, поэтому, если вы хотите пропустить объяснения, просто прокрутите вниз.)
Проект с открытым исходным кодом, и я не буду ничего просить за него, поэтому предпочтительно база данных с открытым исходным кодом и бесплатно. Кроме того, программное обеспечение должно работать как на Linux, так и на Windows.
Есть части проекта, которые должны быть в C++. Проект не достаточно большой код, чтобы оправдать использование второго языка. Так что в основном все это будет C++.
Этот проект не будет иметь ничего общего с сетью, поэтому предпочтительно, чтобы база данных не требовала детрита веб-библиотеки.
Объекты, которые я хочу сохранить, попадают в одну из двух категорий: базовый объект и контейнерный объект. Разница в том, что объекты, которые являются контейнерами, будут содержать еще больше объектов, то есть: проблема частей частей. Мне нужна база данных, которая может обрабатывать такие случаи чисто и эффективно.
Я также ожидаю, что схема будет развиваться быстро, по крайней мере, на начальном этапе. Я также подозреваю, что некоторые старые данные просто не будут вписываться в новые схемы. Поэтому я хотел бы сохранить разные версии схемы. Победа возможна, я хотел бы иметь возможность преобразовывать данные в одну схему в другую схему.
Чтобы приложение работало должным образом, люди должны были обмениваться большими кусками базы данных друг с другом. Поэтому я хотел бы иметь простые способы импорта и экспорта данных, которые я мог бы автоматизировать до некоторой степени.
Наконец, было бы неплохо, если бы база данных могла быть каким-то образом смоделирована в модульных тестах.
Это мои требования. Я воспроизвел их ниже, чтобы людям было легче отвечать.
Спасибо
Нетехнические требования 1. Открытый код желательно бесплатный. 2. Запустите на Windows и Linux
- Имеет интерфейс C++.
- Может обрабатывать не веб-приложения, желательно без REST.
- Может справиться с проблемой "частей частей" довольно хорошо.
- Может обрабатывать несколько индексов.
- Имеет своего рода концепцию версии схемы, может обрабатывать несколько версий схемы и может переносить таблицы из одной схемы в другую.
- Должен иметь простой механизм для перемещения данных из одного экземпляра базы данных в другой.
- Предпочтительно имеет какой-то механизм для тестирования.
2 ответа
HDF5 - это двоичный формат, который ведет себя как иерархическая база данных. У него есть привязка и библиотеки для C++ и python (я использую только последний), и он используется для хранения больших объемов данных, как те, которые создаются в некоторых физических и астрономических экспериментах.
Некоторое время назад я просмотрел несколько баз данных nosql (у них было иное требование, чем у вас - нужно было, чтобы он был автономным сервером). Те, что я помню как особенно интересные, - это Redis и Kyoto Cabinets. Посмотри.
Кстати, вы не упоминаете никаких требований к производительности. Если это так, вы рассматривали SQLite? Простой, встроенный, стабильный и, в конце концов, с гибкостью SQL. С подготовленным оператором потеря производительности SQL не должна быть очень высокой.
РЕДАКТИРОВАТЬ: ooops, только что заметил, что вы спросили об этом больше года назад... Ну, возможно, вы можете сказать нам, что вы выбрали:)