Ответ 1
вы можете рассмотреть C-Tree FairCom - сообщите мне, я отправил вас; -)
Я ищу механизм межплатформенной базы данных, который может обрабатывать базы данных сотнями миллионов записей без серьезного ухудшения производительности запросов. Он должен иметь C или С++ API, который позволит легко и быстро создавать записи и анализировать полученные данные.
Очень обескураженными являются продукты, в которых данные должны быть переведены в строки и из них только для их ввода в базу данных. Технические пользователи, сохраняющие такие вещи, как IP-адреса, не хотят или не нуждаются в этих накладных расходах. Это очень важный критерий, поэтому, если вы собираетесь ссылаться на продукты, будьте откровенны в том, как они предлагают такой прямой API. Не желая быть грубым, но я могу использовать Google - пожалуйста, предположите, что я нашел большинство основных продуктов, и я спрашиваю, потому что часто трудно выработать именно тот прямой API, который они предлагают, а не просто оболочку C вокруг SQL.
Это не обязательно должна быть РСУБД - достаточно простого подхода, основанного на записи ISAM.
В то время как первичная потребность в однопользовательской базе данных, расширение для каких-то общих операций с файлами или серверами, вероятно, будет использоваться в будущем.
Доступ к исходному коду, как с открытым исходным кодом, так и через лицензирование, очень желательно, если база данных поступает из небольшой компании. Это не должно быть GPL или LGPL.
вы можете рассмотреть C-Tree FairCom - сообщите мне, я отправил вас; -)
Я автор hamsterdb.
шкаф tokyo и berkeleydb должны работать нормально. hamsterdb определенно будет работать. Это простой API C, открытый исходный код, независимый от платформы, очень быстрый и проверенный с базами данных до нескольких сотен ГБ и сотнями миллионов элементов.
Если вы готовы оценить и нуждаетесь в поддержке, напишите мне письмо (контактная форма на hamsterdb.com) - я помогу так хорошо, как могу!
до свидания Christoph
Вы не указали, на какой платформе вы находитесь, но если Windows только в порядке, посмотрите Extensible Storage Engine ( ранее известный как Jet Blue), встроенный движок таблицы ISAM, включенный в Windows 2000 и более поздние версии. Он используется для Active Directory, Exchange и других внутренних компонентов, оптимизированных для небольшого количества больших таблиц.
Он имеет C интерфейс и поддерживает двоичные типы данных изначально. Он поддерживает индексы, транзакции и использует журнал для обеспечить атомарность и долговечность. Язык запросов отсутствует; вам нужно работать с таблицами и indexes напрямую сами.
ESE не любит открывать файлы по сети и не поддерживает совместное использование базы данных через общий доступ к файлам. Вам будет трудно найти какой-либо движок базы данных, который поддерживает совместное использование файлов. Механизм базы данных Access Jet (AKA Jet Red, полностью отдельная база кода) является единственным, кого я знаю, и он печально известен тем, что он повреждает файлы по сети, особенно если они большие ( > 100 МБ).
Независимо от того, какой движок вы используете, вам, скорее всего, придется реализовать общие функции использования самостоятельно в своем собственном сетевом сервере или использовать механизм дискретной базы данных.
Для тех, кто находит эту страницу несколько лет спустя, я теперь использую LevelDB с некоторыми подкладками сверху, чтобы добавить необходимое количество индексирования. В частности, это хорошо подходит для встроенных баз данных на iOS. В итоге я написал книгу об этом! (Начало работы с LevelDB, с Packt в конце 2013 года).
Я считаю, что вы ищете BerkeleyDB: http://www.oracle.com/technology/products/berkeley-db/db/index.html
Не обращайте внимания на то, что это Oracle, лицензия бесплатна, и она открыта с открытым исходным кодом - единственный улов в том, что если вы перераспределяете свое программное обеспечение, использующее BerkeleyDB, вы также должны сделать свой источник доступным или купить лицензию.
Он не обеспечивает поддержку SQL, а скорее ищет прямые запросы (через структуру b-tree или hash-table, в зависимости от того, что имеет больше смысла для ваших нужд). Он чрезвычайно надежный, быстрый, ACID, имеет встроенную поддержку репликации и т.д.
Вот небольшая цитата из страницы, на которую я ссылаюсь выше, которая содержит несколько функций:
Хранение данных
Berkeley DB быстро хранит данные и легко без накладных расходов, найденных в другие базы данных. Berkeley DB - это C библиотека, работающая в одном процессе как ваше приложение, избегая межпроцессные задержки связи используя удаленный сервер базы данных. Общий кэши содержат самые активные данные в памяти, избегая дорогостоящего доступа к диску.
- Локальное хранилище данных in-process
- Нейтральный, нестандартный формат данных приложения
- Индексированный и последовательный поиск (Btree, Queue, Recno, Hash)
- Несколько процессов для каждого приложения и несколько потоков на процесс
- Мелкозернистая и настраиваемая блокировка для высококонкурентных систем.
- Управление несколькими версиями concurrency (MVCC)
- Поддержка вторичных индексов
- В памяти, на диске или обоих
- Интерпретация Btree
- Реабилитация дискового пространства в Интернете Btree
- Удаленное удаление блокировки в Интернете
- Шифрование данных на диске (AES)
- Записывает до 4 ГБ и таблицы до 256 ТБ
Обновление: Просто наткнулся на этот проект и подумал о том, что вы опубликовали: http://tokyocabinet.sourceforge.net/index.html. Это под LGPL, поэтому несовместимо с вашими ограничениями, но интересный проект, чтобы проверить, тем не менее.
Один вариант может быть Firebird. Он предлагает как серверный продукт, так и встроенный продукт.
Он также является открытым исходным кодом и существует большое количество поставщиков для всех типов языков.
SQLite будет отвечать этим критериям, за исключением возможного сценария совместного использования файлов в будущем (и на самом деле это могло бы сделать это, если сетевая файловая система правильно реализует блокировки файлов).
Было упомянуто много хороших решений (таких как SQLite). Позвольте мне добавить два, так как вам не нужен SQL:
Я тестировал как многомиллионные проекты.
SQLite имеет тенденцию быть первым вариантом. Он не хранит данные как строки, но я думаю, что вам нужно создать команду SQL для вставки, и эта команда будет иметь некоторое строковое построение.
BerkeleyDB - хорошо спроектированный продукт, если вам не требуется отношениеDB. Я понятия не имею, что для него взимает Oracle, и если вам понадобится лицензия для вашего приложения.
Лично я бы подумал, почему у вас есть некоторые из ваших требований. Провели ли вы тестирование, чтобы проверить, что вам нужно сделать прямую вставку в базу данных? Похоже, вы могли занять пару часов, чтобы написать обертку, которая преобразует любой API, который вы хотите в SQL, а затем посмотрите, соответствуют ли SQLite, MySql... требованиям скорости.
Как вы знакомы с Fairtree, вы, вероятно, тоже знакомы с Raima RDM.
Он появился с открытым исходным кодом несколько лет назад, а затем dbstar утверждал, что они каким-то образом приобрели авторское право. Однако это кажется спорным. От чтения оригинальной лицензии Raima это не представляется возможным. Конечно, можно оставить оригинальную версию кода. Это довольно редко, но у меня есть копия, архивированная.
Раньше использовался продукт b-trieve, но я не уверен, что был включен исходный код. Я думаю, что это было прекращено. Единственным ядром базы данных, с которым я знаком с ориентацией ISAM, является c-tree.