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

StackOverflow https://stackoverflow.com/questions/222699

Вопрос

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

Каковы плюсы и минусы каждой встроенной базы данных?Размер важен так же, как поддержка и ресурсы.Что вы использовали и почему?

Это было полезно?

Решение

Я использую 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 со встроенной базой данных можно перенести в многопользовательское развертывание на основе сервера без ущерба для каких-либо высокопроизводительных функций (таких как хранимые процедуры, триггеры). , мнения и т. д.). И это БЕСПЛАТНАЯ база данных, которая не распространяется на ваш код в процессе.

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

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

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

У нас есть собственные компоненты 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

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

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

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

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

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

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

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

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

Для ознакомления с этими ограничениями см. Delphi Wiki: http://delphi.wikia.com/wiki/Firebird_tipps

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

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

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

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

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

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

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

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

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

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

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

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

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

Components4Developers

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

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

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

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

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

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

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

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

Firebird полностью. Хорошо справляется со всеми задачами, и до сих пор версия 2.1 очень хорошая.

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

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

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

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

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

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

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

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

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

  

Dbisam = 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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top