Вопрос

Мы создаем открытый исходный код Твиттер-клиент и ищете встроенную БД с наименьшая возможная занимаемая площадь который работает с Delphi и хорошо подходит для полнотекстовый поиск (Я знаю, что это не очень хорошо сочетается с небольшими размерами).В идеале он должен быть бесплатным или с открытым исходным кодом (я знаю, что это требовательно).

я склоняюсь к SQLite, но я раньше им не пользовался и не знаю, поддерживает ли он полнотекстовый поиск и насколько хорошо он работает с Delphi.я использовал ДБИСАМ раньше и в него встроен полнотекстовый поиск, но не бесплатно. Жар-птица это еще один вариант, который мы рассмотрели.

Возможно, существует комбинация, которая заставит это работать.Что бы вы использовали и какова его оценка: 1) Footprint, 2) Полнотекстовый поиск, 3) Бесплатность/открытый исходный код.

ОБНОВЛЯТЬ: Спасибо всем за ваши предложения.Так много хороших вариантов на выбор.

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

Решение

Я добился большого успеха, используя ДиСклите.Он имеет поддержку FTS и массу других функций.У них есть бесплатная версия и профессиональная версия.Я считаю, что бесплатная версия также поддерживает FTS.Я пробовал множество реализаций SQLite для Delphi, и это лучшая из тех, что я видел.Он компилируется прямо в ваше приложение, поэтому внешние библиотеки DLL отсутствуют.

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

Другие советы

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

Полнотекстовый поиск Advantage поддерживает операторы AND, OR, NOT и NEAR.Advantage также предоставляет скалярные функции SCORE и SCOREDISTINCT, которые возвращают общее количество всех экземпляров слов в условии поиска.

Полнотекстовые индексы Advantage поддерживаются во время обновления записи, что означает, что они не требуют каких-либо перестроений.Индексы имеют сжатый формат;поэтому фактический размер индекса может быть намного меньше физических данных.Можно выполнять полнотекстовый поиск по неиндексированным данным, но это требует физического поиска данных записи и может быть намного медленнее.Индексированный поиск использует растровые фильтры для оптимальной производительности.

В онлайн-справке есть вся подробная информация о параметрах индексирования и т. д.:

http://tinyurl.com/ctjoqg

Я знаю, что у жар-птицы есть сфинкс надстройка для полнотекстового поиска (хотя, согласно сайту, она «далека от настоящего «полнотекстового поиска»)», ее бесплатный/открытый исходный код, но я не могу найти никакой информации, чтобы сказать, работает ли она со встроенной версией Firebird.

Для полнотекстового поиска Firebird посмотрите: http://www.firebirdfaq.org/faq328/

Леонардо.

Мы интегрировали DotLucene в одно из наших внутренних приложений на базе Delphi, используя Hydra (Майк тогда работал над этим);если мы хотим реализовать этот вариант, я уверен, что мы сможем извлечь его и сделать его пригодным для повторного использования в этом проекте.

Продолжай с SQLite.Для Delphi существует множество БЕСПЛАТНЫХ компонентов sqlite.Некоторые из них перестали быть активными проектами.Но следует отметить один компонент: ЗеосДБ.ZeosDB активно поддерживается, и его поддержка sqlite также идеальна.Если вам нужна поддержка другого механизма БД, ZeosDB снова станет ответом (он поддерживает MySQL, PostgreSQL, Interbase, Firebird, MS SQL, Sybase, Oracle и SQLite).

У NexusDB есть бесплатная встроенная версия и, конечно же, это собственный продукт Delphi.

Вот описание этого реализация полнотекстового поиска.

Я бы посоветовал серьезно рассмотреть возможность использования DBISAM или, теперь, возможно, их нового ElevateDB.Я ожидаю, что из вашего предыдущего опыта вы знаете, что он не увеличивает размер вашего исполняемого файла, является достаточно быстрым, надежным, идеальным решением на основе Delphi и имеет отличную поддержку.С годами их диалект SQL был усовершенствован, и теперь он очень хорошо соответствует высокому уровню соответствия ANSI SQL-2003.

DBISAM/ElevateDB, как вы заметили, не имеет открытого исходного кода, но стоимость лицензии указана только для каждого разработчика (а не для каждого развертывания), поэтому, если в нем участвует всего несколько разработчиков, стоимость (на мой взгляд) незначительна.Стоимость лицензии особенно разумна, если учесть уровень поддержки и оперативности, которые вы получаете в группах новостей DBISAM/Elevatesoft, где главный разработчик/владелец (Тим Янг) активно участвует, отвечая на вопросы и решая проблемы.Помимо стоимости запатентованного решения, существует, конечно, также беспокойство по поводу того, выживет ли бизнес и будет ли продукт продолжать разрабатываться и поддерживаться в будущем.Это вам придется взвесить самостоятельно, но развитие кажется таким же сильным, как и прежде.У них есть провайдеры .NET для своих баз данных, и они поддерживают кроссплатформенную разработку с помощью FreePascal/Lazarus.

Одним из плюсов полнотекстового поиска DBISAM является то, что он тесно интегрирован с SQL.То есть вы можете выполнить один оператор SELECT, который напрямую объединяет обычные критерии WHERE в некоторых полях с критериями полнотекстового поиска в других.В зависимости от ваших потребностей, это хорошая функция, которая позволяет очень просто и быстро делать некоторые вещи, которые потребовали бы больше усилий, используя другое полнотекстовое решение.Я думаю, что большинство дополнительных решений, таких как Lucene и другие, которые можно использовать с Firebird, не так тесно интегрируются с обычным SQL и ограничивают вас получением набора записей только с полнотекстовыми критериями.Что-то вроде фирменного дополнения Textolution для Firebird (http://www.textolution.com/ftsib_example.asp) похоже, что он может обеспечить построение одного сложного (вложенного) запроса, который будет применять как обычные, так и полнотекстовые критерии, но DBISAM делает это более элегантно.А добавление проприетарного дополнения к базе данных с открытым исходным кодом в любом случае противоречит цели перехода на открытый исходный код.

Я думаю, что одним из недостатков полнотекстового поиска DBISAM/ElevateDB является то, что он поддерживает только использование условий «И» и «ИЛИ» и не имеет никакого поиска по близости.

Я заметил, что для SQLite есть полнотекстовое решение, http://www.sqlite.org/cvstrac/wiki?p=FullTextIndex.Я никогда не использовал SQLite, но знаю, что многим он нравится.Одна из областей, в которой я почти уверен, что DBISAM/Elevatesoft имеет большое преимущество, — это многопользовательские приложения, где требуется надежная функция блокировки, хотя это не обязательно будет иметь какое-либо значение для однопользовательского настольного приложения.

Я бы использовал Sqlite, используя Адуком Компоненты Sqlite, с ними легче работать, чем с DiSQLite, они бесплатны и работают как компоненты TDataset, я бы проголосовал за sqlite, потому что:

  1. Это очень быстрая и компактная база данных.
  2. Очень небольшой размер, всего около 200 КБ Dll.
  3. При использовании с компонентами Aducom его можно связать статически, поэтому нет необходимости распространять dll.
  4. Он имеет встроенную поддержку полнотекстового поиска.
  5. Он широко используется и используется во многих бесплатных и коммерческих приложениях в качестве внешнего хранилища.
  6. Он содержит большую часть стандартного SQL, поэтому будет использована большая часть ваших знаний по sql.

Sqlite - это в основном только однопользовательское/одно подключение.При обновлении блокируется вся база данных.Вы решаете эту проблему, устанавливая значение тайм-аута для ожидания других соединений (по умолчанию тайм-аут отсутствует).Многопользовательский доступ может стать очень медленным и/или давать частые тайм-ауты в зависимости от того, какое значение вы используете.

Я использовал компоненты Asqlite из http://www.aducom.com/.Бесплатный и с открытым исходным кодом.Судя по внешнему виду, в настоящее время не поддерживает d2009, но находится в стадии разработки.Есть также ряд других наборов компонентов, но я не использовал другие.

Вы можете добавить полнотекстовый поиск в любое приложение Delphi с помощью Rubicon (теперь под новым управлением в http://www.href.com/rubicon).Однако это не бесплатно :(

Зачем вам нужен полнотекстовый поиск?Я не пользуюсь Твиттером, но считаю, что сообщения в Твиттере содержат максимум 140 символов?Они поместятся в одно поле varchar.Чтобы найти что-то в таком поле, вам не понадобится полнотекстовый поиск.

Существует также DotLucene, который требует установки .NET Framework, но его можно легко загрузить через .net com apis.Он идеально подходит для поиска и имеет формат запроса, общий для большинства поисковых систем.

У меня есть полурабочее решение Delphi: http://sourceforge.net/projects/mutis/, порт в Дельфы из Лусене.

Большинство из них работают нормально, но, к сожалению, они основаны на мертвой реализации Delphi.NET, поэтому требуется работа по обновлению до собственной версии (да, это была большая ошибка - выбрать маршрут .NET :()

ДБИСАМ полностью.Работает, очень надежно, встроенная полнотекстовая индексация работает отлично (обширный личный опыт!)

ElevateDB, возможно, тоже отличный вариант, но у меня нет непосредственного опыта работы с ним.

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