Подтвердить что ты не робот

Какая встроенная база данных, способная на 100 миллионов записей, имеет эффективный C или С++ API

Я ищу механизм межплатформенной базы данных, который может обрабатывать базы данных сотнями миллионов записей без серьезного ухудшения производительности запросов. Он должен иметь C или С++ API, который позволит легко и быстро создавать записи и анализировать полученные данные.

Очень обескураженными являются продукты, в которых данные должны быть переведены в строки и из них только для их ввода в базу данных. Технические пользователи, сохраняющие такие вещи, как IP-адреса, не хотят или не нуждаются в этих накладных расходах. Это очень важный критерий, поэтому, если вы собираетесь ссылаться на продукты, будьте откровенны в том, как они предлагают такой прямой API. Не желая быть грубым, но я могу использовать Google - пожалуйста, предположите, что я нашел большинство основных продуктов, и я спрашиваю, потому что часто трудно выработать именно тот прямой API, который они предлагают, а не просто оболочку C вокруг SQL.

Это не обязательно должна быть РСУБД - достаточно простого подхода, основанного на записи ISAM.

В то время как первичная потребность в однопользовательской базе данных, расширение для каких-то общих операций с файлами или серверами, вероятно, будет использоваться в будущем.

Доступ к исходному коду, как с открытым исходным кодом, так и через лицензирование, очень желательно, если база данных поступает из небольшой компании. Это не должно быть GPL или LGPL.

4b9b3361

Ответ 1

вы можете рассмотреть C-Tree FairCom - сообщите мне, я отправил вас; -)

Ответ 2

Я автор hamsterdb.

шкаф tokyo и berkeleydb должны работать нормально. hamsterdb определенно будет работать. Это простой API C, открытый исходный код, независимый от платформы, очень быстрый и проверенный с базами данных до нескольких сотен ГБ и сотнями миллионов элементов.

Если вы готовы оценить и нуждаетесь в поддержке, напишите мне письмо (контактная форма на hamsterdb.com) - я помогу так хорошо, как могу!

до свидания Christoph

Ответ 3

Вы не указали, на какой платформе вы находитесь, но если Windows только в порядке, посмотрите Extensible Storage Engine ( ранее известный как Jet Blue), встроенный движок таблицы ISAM, включенный в Windows 2000 и более поздние версии. Он используется для Active Directory, Exchange и других внутренних компонентов, оптимизированных для небольшого количества больших таблиц.

Он имеет C интерфейс и поддерживает двоичные типы данных изначально. Он поддерживает индексы, транзакции и использует журнал для обеспечить атомарность и долговечность. Язык запросов отсутствует; вам нужно работать с таблицами и indexes напрямую сами.

ESE не любит открывать файлы по сети и не поддерживает совместное использование базы данных через общий доступ к файлам. Вам будет трудно найти какой-либо движок базы данных, который поддерживает совместное использование файлов. Механизм базы данных Access Jet (AKA Jet Red, полностью отдельная база кода) является единственным, кого я знаю, и он печально известен тем, что он повреждает файлы по сети, особенно если они большие ( > 100 МБ).

Независимо от того, какой движок вы используете, вам, скорее всего, придется реализовать общие функции использования самостоятельно в своем собственном сетевом сервере или использовать механизм дискретной базы данных.

Ответ 4

Для тех, кто находит эту страницу несколько лет спустя, я теперь использую LevelDB с некоторыми подкладками сверху, чтобы добавить необходимое количество индексирования. В частности, это хорошо подходит для встроенных баз данных на iOS. В итоге я написал книгу об этом! (Начало работы с LevelDB, с Packt в конце 2013 года).

Ответ 5

Я считаю, что вы ищете 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, поэтому несовместимо с вашими ограничениями, но интересный проект, чтобы проверить, тем не менее.

Ответ 6

Один вариант может быть Firebird. Он предлагает как серверный продукт, так и встроенный продукт.

Он также является открытым исходным кодом и существует большое количество поставщиков для всех типов языков.

Ответ 7

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

Ответ 8

Было упомянуто много хороших решений (таких как SQLite). Позвольте мне добавить два, так как вам не нужен SQL:

  • HamsterDB быстрый, простой в использовании, может хранить произвольные двоичные данные. Нет общих разделов баз данных.
  • Glib Модуль HashTable кажется довольно интересным и очень так что вы не рискуете зайти в тупик. С другой стороны, Я не уверен, что есть и простой способ сохранить базу данных на диск, он в основном для встроенных файлов

Я тестировал как многомиллионные проекты.

Ответ 9

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

BerkeleyDB - хорошо спроектированный продукт, если вам не требуется отношениеDB. Я понятия не имею, что для него взимает Oracle, и если вам понадобится лицензия для вашего приложения.

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

Ответ 10

Как вы знакомы с Fairtree, вы, вероятно, тоже знакомы с Raima RDM.

Он появился с открытым исходным кодом несколько лет назад, а затем dbstar утверждал, что они каким-то образом приобрели авторское право. Однако это кажется спорным. От чтения оригинальной лицензии Raima это не представляется возможным. Конечно, можно оставить оригинальную версию кода. Это довольно редко, но у меня есть копия, архивированная.

Ответ 11

Раньше использовался продукт b-trieve, но я не уверен, что был включен исходный код. Я думаю, что это было прекращено. Единственным ядром базы данных, с которым я знаком с ориентацией ISAM, является c-tree.