Какую встроенную базу данных использовать в приложении Delphi?

Я создаю настольное приложение в Delphi и планирую использовать встроенную базу данных. Я начал проект, используя SQlite3 с библиотекой DISQLite3. Это работает, но документация кажется немного легкой. Недавно я обнаружил Firebird (да, у меня какое-то время не было Windows), и, похоже, у него есть некоторые привлекательные функции и поддержка.

Каковы некоторые плюсы и минусы каждого встроенного БД? Размер важен так же как поддержка и ресурсы. Что вы использовали и почему?

29 ответов

Решение

Я использую SQLite (через DISQLite3) в FeedDemon в течение нескольких месяцев, и я настоятельно рекомендую его - он был чрезвычайно быстрым и стабильным. Как сказал Хавьер, документы для библиотеки могут быть тонкими, но документы для самого SQLite очень хороши.

Я использую Firebird 2.1 Embedded, и я вполне доволен этим. Мне нравится тот факт, что размер базы данных практически неограничен (протестировано с базами данных> 4 ГБ, и это работает), и что файл базы данных совместим с сервером Firebird, так что Я могу использовать стандартные инструменты для управления базами данных и проверки. Распространение состоит из удаления нескольких файлов в вашей папке EXE.

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

Я использовал SQlite3 для многих проектов (но из C/C++ и Objective-C). Она очень мала - никаких зависимостей - база данных находится в одном файле.

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

Посмотрим, быстрое сравнение:

SQLite:

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

Firebird встроен:

  • строгая типизация в базе данных
    • поддерживаются не все типы данных SQL
  • кроссплатформенные файлы
    • Встроенный Firebird работает только на Windows
    • Файлы из Firebird в том же формате, что и полная версия сервера
    • Файлы из встроенного Firebird могут быть скопированы на сервер, отличный от Windows, для использования
  • доступно в соответствии с измененным MPL ("то, что наше, наше и должно оставаться бесплатным, то, что ваше, ваше, и вам не нужно его выпускать")
  • поддерживает транзакции, триггеры и т. д.

MySQL встроен:

  • поддержка функций SQL зависит от формата файла
  • (IIRC) кроссплатформенные файлы
  • GPL, если вы не платите роялти
  • работает на Windows, Linux, Mac
  • невероятно популярен среди толпы открытых источников

Даже встроенные базы данных имеют свои сильные и слабые стороны. Вам нужно будет сопоставить эти сильные и слабые стороны с тем, что вы делаете, чтобы принять решение.

Я использовал DBISAM в ряде проектов. Он полностью встроен даже без необходимости использования внешней DLL. В отличие от других, перечисленных вами, он является коммерческим. Хотя много замечательных функций и очень хорошо документированы и поддерживаются. У меня есть преемник, которого я еще не пробовал.

Встраиваемый Firebird - наш выбор № 1, потому что без изменений в коде однопользовательское приложение Delphi со встроенной базой данных можно перенести в многопользовательское развертывание на основе сервера без ущерба для каких-либо высокопроизводительных функций (таких как хранимые процедуры, триггеры, представления, так далее.). И это НАСТОЯЩАЯ бесплатная база данных и не GPL ваш код в процессе.

Настоятельно рекомендуем использовать AnyDAC при работе с базами данных и Delphi - тогда вы можете выбрать плавный таргетинг на FB или SQLite.

Я бы предпочел FB для встроенных приложений. Том

Это действительно зависит от того, что вам нужно. Для однопользовательских приложений Firebird Embedded или SQLite, вероятно, являются лучшим выбором (и цена правильная). С другой стороны, если вам нужна поддержка большого количества нескольких пользователей, вам, вероятно, следует использовать обычную Firebird вместо встроенной версии (сервер прост в установке, поэтому у вас не будет особых проблем).

И если вам нужно что-то промежуточное для умеренного многопользовательского приложения, лучше подойдет одна из плоских баз данных. Я обнаружил, что абсолютная база данных ComponentAce лучше подходит для моих нужд, чем DBISAM, NexusDB или VistaDB.

Он оставляет относительно небольшую площадь (без DLL), это однофайловая БД (обязательная для меня), поддерживает Unicode, сжатие BLOB, шифрование, и технические ограничения кажутся впечатляющими для плоской базы данных. Более того, поддержка была хорошей в тех случаях, когда она мне была нужна.

Что касается минусов, я заметил, что он не поддерживает вложенные транзакции, но кроме этого у меня не было проблем.

Я использую Advantage Database Server от Sybase, но я также являюсь менеджером по исследованиям и разработкам, поэтому этот пост предвзят.:)

У нас есть собственные компоненты Delphi TTable и TQuery для WIN32 VCL и VCL.NET. Прямой доступ к таблицам в дополнение к поддержке SQL делает Advantage уникальным среди многих других предложений Delphi. Advantage поддерживает большие таблицы (ограничено только количеством записей, 2 миллиарда) и имеет бесплатный локальный движок, который хорош для ПК для разработки и для небольших клиентских сайтов, которые не требуют функциональности клиент / сервер. Переключитесь на клиент / сервер с одним свойством соединения, без других изменений.

У нас множество клиентов, поэтому доступ к данным за пределами Delphi также очень прост (поставщик данных.NET, ODBC, OLE DB, PHP, Perl, JDBC и т. Д.).

Основной веб-сайт продукта: http://www.advantagedatabase.com/ Веб-сайт разработчика: http://devzone.advantagedatabase.com/

Что касается размера, ничто не сравнится с SQLite.

когда вы говорите об отсутствии документации, я думаю, что это документ для DISQLite3. Документация по SQLite довольно полная

Посмотрите на NexusDB. Использовали очень успешно в прошлом.

NexusDB предлагает полный спектр от встроенного до полного клиент / сервер / удаленный. Кроме того, я считаю, что совместим с SQL2003. Я использую его в нескольких проектах, и мне очень приятно, и тот факт, что он может работать в таком широком диапазоне "масштабов", является большим плюсом (не нужно изучать другую БД для масштабируемых приложений, так далее).

Посмотрите на это сравнение встроенных баз данных: http://sql-db.cz.cc/, это может быть полезно. Здесь представлено большинство вышеупомянутых продуктов: Advantage, DBISAM, Firebird, MS SQL Server и многое другое: Accuracer, Apollo, ElevateDB, NexusDB, TurboDB.

Проблема с (встроенным) firebird заключается в том, что база данных не может находиться на сетевом диске. Кроме того, трудно иметь базу данных на диске только для чтения (CD/DVD).

О некоторых мерах по устранению этих ограничений см. Вики Delphi: http://delphi.wikia.com/wiki/Firebird_tipps

Я провел веб-поиск, чтобы найти быстрый пакет базы данных для моего приложения Delphi. Я хотел, чтобы он полностью содержался в исполняемом файле без каких-либо внешних DLL или библиотек. Первоначально я нашел Accuracer от AidAim. Они опубликовали, насколько быстро работает их база данных, и даже дали сравнение с другими подобными пакетами, чтобы "доказать" свою точку зрения.

Я хотел верить их заявлениям, но думал, что буду искать в Интернете немного больше, чтобы найти время других пакетов. Я был очень удивлен, обнаружив сообщение на форумах Delphi, где человек спросил, какую базу данных использовать, и было 14 разных предложений. Один из респондентов провел свои собственные сравнения времени и обнаружил, что Accuracer довольно медленный по сравнению с несколькими другими, которые Accuracer (удобно) пропустил из своей собственной страницы сравнения.

Эта публикация, а также дополнительные исследования, проведенные мной, привели меня к DISQLite3, продукту, основанному на программе с открытым исходным кодом SQLite, но с очень быстрыми усовершенствованиями для работы в Delphi, с очень небольшими накладными расходами и с вызовами на основе команд - который я хотел. Он активно находится в стадии разработки и скоро будет иметь официальную версию Delphi 2009, хотя, по-видимому, текущая версия будет работать под D2009.

Addenum: DISQLite3 Версия 2.0.0, выпущенная 17 ноября, поддерживает D2009.

Я знаю, что доступ к MS - это сравнительно дерьмо (и я ожидаю, что его здесь застрелят), но если нужны только небольшие данные, это может иметь преимущества, если в любом случае используется MS Office. Для меня это был способ хранить данные программы с большей гибкостью, чем файлы CSV, что является распространенным подходом для научного кода.

Вы можете создать базу данных доступа из кода Delphi, не устанавливая MS Office с помощью драйвера ado & odbc (возможно, необходимо иметь исходный файл.accdb без таблиц, из которых можно скопировать данные, а затем заполнить их, я не могу вспомнить эту деталь. Не уверен в ситуации с лицензированием делая это.

Расширение.accdb может быть изменено на что-то другое и файл защищен паролем (в ограниченной степени), поэтому для пользователей не сразу очевиден его доступ, если это необходимо. Я знаю, что несколько коммерческих разработчиков делают этот метод и копируют его самостоятельно. Это оказалось проще в настройке, чем sqlite, но, возможно, потому что я уже использовал ado & access в прошлом.

Я использую SQL Server Express и компоненты ADO. Работает отлично. Вы можете запустить установку SQL Server Express из командной строки, чтобы скрыть сложности от пользователей. Вы также можете распространять базу данных, которую вы загружаете по имени файла. Существуют миллионы пользователей SQL-серверов, поэтому решения любых проблем можно легко найти в промежутках:-)

Я неравнодушен к Абсолютной БД Компонента Эйса. Хотя это коммерческий продукт ($), он прочный, простой в использовании, компактен и хорошо документирован. Если вы ищете огромное многопользовательское приложение, это не тот путь, но если ваши многопользовательские потребности невелики (или вообще отсутствуют), это хороший вариант.

kbMemTable - хороший кандидат. Работает в памяти, быстро, многопоточность. Раньше было бесплатно.

http://www.components4developers.com/

Встраиваемый Firebird - наш выбор №1. И комплект Unified Interbase v2.0 с ним. Отличное и стабильное решение!

Если встроенный является абсолютной необходимостью, посмотрите на DBISAM.

Я использовал DBISAM и kbMemTable в разных случаях.

Что мне нравится в DBISAM, так это то, что он обладает отличными функциями и, как правило, очень надежен. Я использовал его в больших базах данных, полнотекстовом поиске, режиме только для чтения, CGI и многих других ситуациях.

Однако он довольно большой по сравнению с компонентами на основе kbMemTable или SQLite. И вы не можете иметь один файл на базу данных (или даже таблицу) - в зависимости от ситуации, это является серьезным недостатком.

kbMemTable очень маленький и отлично подходит для небольших объемов данных. Поскольку он работает в памяти, он, конечно, должен быть небольшим объемом данных.

Еще один вариант, который я выбрал для нескольких своих настольных приложений, - это выгрузка данных напрямую из / в мою иерархию объектов с помощью TWriter/TReader. Это, безусловно, самый маленький вариант, и он абсурдно быстр по сравнению с использованием базы данных. Файлы данных тоже крошечные.

Однако у него есть все виды недостатков - вам придется кодировать версии, если вы захотите когда-либо добавить / изменить поля, если только в памяти это не является еще более сложным, никакой многопользовательской поддержки вообще и т. Д.

Я использовал ScimoreDB. У этого есть свои особенности, поскольку они дают ему лицензионный платеж, и у него есть свои особенности в типах данных и с некоторыми проблемами установки. Это было на проекте C#.

У меня есть база данных, в которую я должен записывать 5 полевых данных за каждые 20 секунд в течение 10 дней. 3 поля являются целыми, 1 поле является двойным (время), а 1 поле является строкой [5].

Я все еще использую Delphi6 srv2 из-за своих компонентов. Более новые версии Delphi ужасны в отношении компонентов, и мне приходится тратить тысячи долларов на восстановление библиотеки компонентов. Поэтому Delphi 6 по-прежнему лучше всего подходит для реальных коммерческих приложений, которые никогда не создают много проблем с версией Delphis. Во многих случаях, таких как данные USB или чтения компорта и т. Д., Они выпускают более новые, прежде чем предыдущие версии никогда не появятся на рынке.

Я настроил код с Delphi6, который добавляет 43200 записей в таблицу для тестирования, потому что я буду развертывать таблицу в приложении, пока в ней 43200 записей. Я покажу все данные на DBChart.

Результат теста ниже базы данных заполнили таблицы командой вставки с 43200 записями

Дбисам = 34 с,
ElevateDb = 11 сек,
AbsoluteDB = 45 с,
SQLlite = 32 минуты,
Жар-птица = 12 минут,
MSSQL12 localDB = 28 минут,
Легкий стол = 8 минут,
BDE = заблокирован,

Я не тестировал oracle, blackfish, sysbase, nexsusDb и т. Д., Но, похоже, они тоже будут работать очень медленно. Я подключился к DBChart, и только elevateDb и absoluteDB загрузили 43200 записей в DBchart в исключительное время, например 7~10 секунд. Посмотри все минут. Поэтому более медленные базы данных всегда нуждаются в уловках кодирования, чтобы добиться успеха в некоторых реальных работах.

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

С MSSQL и SQLLite3 чрезвычайно сложно управлять delphi, из-за которых я очень устал.

Это мои результаты теста
В конце я решил использовать AbsoluteDB, Dbisam и Elevate. Я скинул остальное с ПК.

Программное обеспечение Elevate не поддерживает функцию recno, для управления которой требуются дополнительные коды во время выполнения. Это замедляет работу базы данных. Другая ошибка в программном обеспечении Elevate - поля autoinc. Нет способа сбросить его. Поэтому я не выбрал программное обеспечение Elevat, даже если это самая быстрая база данных. Они говорят много хороших функций, но сколько из них мы используем на самом деле. Они просто оставили самые важные функции не поддерживаемыми, но исправили множество ненужных функций. и, кажется, с 8 лет нет никаких преимуществ.

Если вы хотите увидеть своими глазами, пожалуйста, попробуйте и посмотрите..

Я думаю между двумя сейчас абсолютной БД или DBisam4

Жар-птица весь путь. Делает все хорошо, и пока версия 2.1 очень солидная.

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

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

Firebird действительно потрясающий и имеет небольшой размер, так что вы можете использовать встроенный, и он может масштабироваться вверх для многих пользователей и отлично работает с Unicode. Я использую компоненты devart с Delphi 2009 и FIB plus для Delphi 6/7 (их версия для 2009 и Unicode пока не готов, тоже неплохо)

Когда дело доходит до встроенных баз данных, первый вопрос: это многопользовательский? На самом деле, кому нужна база данных, которая не допускает множественных подключений (чтение и запись) к ней? Я перепробовал (интенсивно) все упомянутые базы данных и нашел только одну, которая действительно функционирует так, как должна. И это Accuracer. Жаль только с точностью, что это группа из трех человек и хроническое отсутствие надлежащей поддержки. Он также в основном статичен в разработке, так как в течение многих лет мы не видели реальных особенностей. Неудивительно, поскольку его развивает только один человек. Кажется, они живут старой славой. Похвалы пользователей отражают это (обычно комментарии 10 лет). Для одного пользователя я бы порекомендовал Absolute Database. Что касается крупных игроков, я бы порекомендовал SQL Server от Microsoft. Oracle превратился в вздор и медленно вымирает.

PS Что хорошо в точности, так это то, что их встроенная база данных функционирует так же, как полноценный сервер. Он блокирует только текущую запись, если она используется, а остальные функционируют нормально. Хорошая база данных. Жаль только застой.

Хммм, никто не рекомендовал BDE - интересно, почему это так;-)

BlackFishSQL - это еще одна возможность, хотя я еще не провел глубокого тестирования.

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