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

38

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

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

Теги:
database
desktop
embedded-database

29 ответов

14
Лучший ответ

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

  • 1
    См. Stackoverflow.com/questions/6070612/… о статически связанном движке SQLite3: то есть без внешней DLL, все встроено в ваш EXE-файл. Я использовал базу данных SQLite3, используя более 4 ГБ данных, без каких-либо проблем с производительностью (если, конечно, некоторые индексы созданы правильно).
  • 0
    sqlite не многопользовательская база данных. Это говорит обо всем.
39

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

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

  • 5
    Embarcadero только что объявил, что RAD Studio 2010 будет включать встроенную поддержку Firebird. Так что теперь я согласен с Габром, что это похоже на путь
  • 7
    Начиная с Firebird 2.5 встроенный эксклюзивный доступ больше не требуется. Несколько приложений могут одновременно обращаться к локальной базе данных.
19

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

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

  • 0
    Разработка приложений Delphi с использованием SQLite и AnyDAC: da-soft.com/blogs/…
14

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

SQLite:

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

Встроенная Firebird:

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

Встроенный MySQL:

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

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

13

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

  • 0
    Еще один голос за DBISAM и (еще лучше) ElevateDB.
  • 0
    Твердый продукт. Хорошая документация и поддержка.
Показать ещё 4 комментария
9

Встраиваемый Firebird является нашим выбором # 1, потому что без изменений кода однопользовательское приложение Delphi со встроенной базой данных может быть перенесено на многопользовательское развертывание на базе сервера без ущерба для любой из функций верхнего уровня (таких как хранимые процедуры, триггеры, просмотров и т.д.). И его TRUE бесплатная база данных и не GPL ваш код в этом процессе.

7

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

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

6

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

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

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

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

6

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

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

4

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

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

  • 1
    Да вы правы. Документы по SQLite очень хороши. Я нашел их нуждающимися в DISQLite3.
3

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

  • 1
    Хорошее сравнение, но очень жаль, что они оставили SQLite и DISQLite3
  • 0
    Ссылка выглядит мертвой. Нашел то, что выглядит таким же контентом здесь: delphi.xcjc.net/viewthread.php?tid=45734
3

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

3

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

3

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

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

  • 0
    Файл базы данных на сетевом диске - ерунда. Вместо этого поместите туда СЕРВЕР базы данных и ожидайте некоторого (стремительного) повышения производительности. Что касается баз данных только для чтения, Firebird может справиться с этим без проблем: просто используйте «GFIX -mode read_only» (и установите атрибут readonly файла базы данных в файловой системе).
  • 0
    Здесь речь идет о встроенной базе данных, поэтому сервер вообще не имеет смысла. Но размещение базы данных на сетевом диске (при этом доступ к ней возможен только из одного приложения).
Показать ещё 1 комментарий
2

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

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

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

2

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

2

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

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

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

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

2

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

  • 0
    Не совсем встроенный, поскольку база данных требует, чтобы DLL были зарегистрированы в реестре. Тем не менее, это хорошее решение, которое я также использую, поскольку оно легко масштабируется до уровня SQL Server уровня предприятия.
  • 0
    Мне пришлось понизить рейтинг не потому, что я с этим не согласен, а потому, что этот вопрос относится к встроенному серверу баз данных, а SQL далеко не встроен. Однако SQL Server - отличное решение, и я на самом деле использую его постоянно.
2

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

  • 0
    Я согласен - как продукт это хорошая замена для BDE - хотя мне пришлось изменить несколько SQL-запросов, чтобы заставить их работать. Ссылка: componententace.com/…
1

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

  • 0
    +1 Спасибо за ссылку на компоненты UIB. Я искал активное соединение с открытым исходным кодом, и это выглядит великолепно.
1

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

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

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

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

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

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

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

Components4Developers

0

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

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

0

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

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

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

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

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

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

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

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

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

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

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

Я думаю, что между двумя теперь абсолютными DB или DBisam4

  • 0
    «MSSQL и SQLLite3 чрезвычайно сложны в управлении для Delphi» На самом деле ими легко управлять, но Delphi не подходит для этого. Используйте Sql Server Management Studio и одну из утилит управления Sqlite (есть одна, которая является надстройкой для Firefox).
0

Хммм, никто не рекомендовал БДЭ - мне интересно, почему это: -)

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

  • 2
    Никто не рекомендовал BDE, потому что это не встроенная база данных. Конечно, есть дополнительная проблема, которая больше не поддерживается.
  • 1
    BlackFish SQL, база данных, установленная с последними версиями Delphi, не является частью Delphi XE ... и, похоже, Embarcadero отключил ее blog.marcocantu.com/blog/blackfish_sql_replacement.html
0

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

0

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

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

  • 0
    SQLite: Кажется, что есть проблемы с одновременным доступом из нескольких потоков - см. Stackoverflow.com/questions/700709 .
0

Firebird полностью. Все в порядке и до сих пор версия 2.1 очень прочная.

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню