Ищем локальную базу данных для D2009+
Я пытаюсь обновить устаревшее приложение, которое хранит все данные в собранной системе файлов BDE Paradox. Программа работает довольно хорошо, в определенных узких условиях, но имеет серьезные проблемы с производительностью.
Я хотел бы попытаться улучшить ситуацию, обновив систему баз данных. Мне нужна локальная база данных, предпочтительно та, где я могу хранить все это в одном файле вместо текущей системы "один или несколько файлов на таблицу". Он должен поддерживать связи по внешнему ключу и индексирование таблиц, а также должен иметь возможность быстро возвращать результат из запроса таблицы с сотнями тысяч элементов.
Это последнее важно. Текущая система проиндексирована, но это не имеет большого значения. Кажется, что все запросы выполняются за время O(N), где N - общий размер таблицы, и это становится ужасно медленным, когда таблицы начинают становиться большими. Я не совсем уверен, почему, но это должно уйти.
И это должно работать под D2009 и позже. Кто-нибудь может дать некоторые рекомендации?
10 ответов
Еще один голос за встроенный Firebird (и Firebird в целом)!
У меня только что был отличный опыт портирования приложения Interbase 6.0 на встроенный Firebird 1.5; после непродолжительного чтения документации фактическое преобразование заняло буквально 20 минут, и теперь мое приложение успешно работает в Vista и Windows 7. Если вам не нужна многопользовательская поддержка, я бы серьезно посмотрел на встроенный Firebird (и если вы Вам нужна многопользовательская поддержка, тогда почему бы не посмотреть на обычную Firebird?
Это один файл для БД и пара небольших DLL для движка, и его легко развернуть, поддерживать и создавать резервные копии. Существует множество инструментов, которые могут помочь при разработке, а техническая поддержка в сообществе Delphi для IB и Firebird не имеет себе равных.
Поддержка SQL превосходна с ограничениями, триггерами и хранимыми процедурами (у нас также есть UDF, чтобы помочь расширить язык - библиотеки DLL, которые могут быть написаны на Delphi и использованы как встроенные функции и т. Д. В вашей базе данных. Очень быстро, очень гибко).
Ваше последнее замечание по поводу производительности - ну, во всяком случае, Interbase всегда была довольно быстрой, и мой опыт работы со встроенным Firebird до сих пор состоит в том, что он "кричит" - действительно, действительно впечатлен.
Я использовал этот SQLite Wrapper с хорошим успехом под D2009. У меня все заработало за считанные минуты. У него индексирование и очень низкие накладные расходы. (Это бесплатно, и вам не нужно ничего, кроме SQLite Dll)
Существует также коммерческая оболочка SQLite от Delphi Inspiration, и на сайте говорится, что у них также есть бесплатная лицензия для некоммерческого и образовательного использования. Я не использовал это.
Я также использовал встроенный Firebird, но вам также понадобятся компоненты подключения, чтобы общаться с ним. У меня есть IBObjects, и это то, что я использую как для серверной, так и для встроенной версий. Я пробовал другие бесплатные компоненты базы данных Firebird, но не нашел ни одного, который бы мне нравился или в котором я чувствовал себя уверенно.
[РЕДАКТИРОВАТЬ]
Поскольку большинство людей предлагают Firebird, вот некоторые компоненты подключения для Firebird, которые я пробовал в прошлом или о которых я слышал:
Объекты базы данных Mercury - бесплатно / с открытым исходным кодом
IBObjects - Коммерческий (я сам купил этот)
FIBPlus - Коммерческая
Firebirds ODBC Driver - бесплатно / с открытым исходным кодом
ZeosLib - бесплатно / с открытым исходным кодом
В этом вопросе есть некоторая хорошая информация - SQLite3 и Firebird Embedded кажутся хорошими вариантами.
Я бы рекомендовал использовать Postgresql в качестве базы данных, мы используем его во всех проектах, с которыми мы работаем, и протестировали его с более чем 4 миллионами записей в одной таблице и работали довольно хорошо.
Параллелизм?
Я использовал SQLite в одном (не Delphi) проекте и был очень доволен этим.
В противном случае, я думаю, что встроенная однофайловая СУБД для Delphi предпочтительнее всего Firebird.
Попробуйте базу данных Advantage, предлагаемую Sybase (приобретена у Extended Systems)
http://marketing.ianywhere.com/forms/ADS91-30-Day
Это бесплатно, если вам не нужны клиент / сервер или интернет.
Недостатком является то, что это не 100% VCL, поэтому в VCL включены статические ссылки на библиотеки DLL.
Если приложению когда-либо понадобится масштабировать, вам больше не придется менять базы данных.
Postgresql очень хорош, но это тяжелый механизм, он ближе к оракулу, так что вы можете делать очень тяжелые приложения, но немного неудобно поддерживать
Firebird просто фантастически встроен или не предназначен для подключения в 2009 году. Вы можете использовать FIB plus с devrace.com, у них есть пробная версия, которая просто показывает наглядный экран, так что если это не коммерческое приложение, это нормально.
иначе, если это коммерческое приложение, вы можете потратить 300 $ и купить его, я также использовал devart компоненты для interbase/firebird, и они тоже очень хороши, если вы хотите бесплатно использовать zeos, но вы получаете то, что платите за http://sourceforge.net/projects/zeoslib/ SQL lite - это не один файл, и если он многопользовательский, это отстой
Другой вариант - использовать ADO и базу данных Microsoft Access. Единственный недостаток заключается в том, что у пользователя должен быть установлен Jet-двигатель и MDAC... что делает большинство машин. Преимущество этого состоит в том, что это упрощает переход на MSSQL. Просто измените строку подключения, чтобы она указала на базу данных SQL Server, и внесите несколько небольших изменений в запрос.
Я использовал NexusDB в течение многих лет, и это небольшая, надежная, гибкая база данных. Он написан на Delphi, поставляется с полным исходным кодом и может быть полностью скомпилирован в ваше приложение (без DLL, чтобы распространять) или работать как система клиент-сервер.
Трудно понять, будет ли оно соответствовать вашим требованиям к производительности, но у меня не было проблем с производительностью моего SQL-запроса, если я проиндексировал нужные поля. Это один файл на один продукт таблицы, но не позволяйте этому помешать вам взглянуть.
Это коммерческий продукт, но он предлагает версию только для DCU, которую можно бесплатно использовать только в однопользовательских / встроенных приложениях.
Я работаю над завершением преобразования большого приложения, которое использует BDE/Paradox для локальной базы данных и Oracle 8i для удаленной базы данных.
Я использую UniDAC от DevArt. Это позволяет мне один набор компонентов (полностью свободный от старого BDE), который может использовать MSSQLServer как локальную базу данных и продолжать использовать Oracle как мой удаленный. У меня есть возможность гораздо проще переключать базы данных на обоих концах, просто меняя провайдеров.
Мне нравится этот подход, и компоненты, кажется, довольно хорошо сделаны.
Джей (D2007)