2009-03-27 4 views
10

Wir schaffen eine Open-Source-Twitter client und suchen nach einem Embedded DB mit dem kleinsten Raum möglich, die mit Delphi funktioniert und eignet sich gut für Volltextsuche (Ich weiß, dass das bei sehr geringem Platzbedarf nicht so gut geht). Im Idealfall sollte es frei oder Open Source sein (fordernd, ich weiß).Volltextsuche mit eingebetteter DB in Delphi

Ich bin auf SQLite gelehnt, aber ich habe es vorher nicht verwendet und weiß nicht, ob es die Volltextsuche unterstützt, oder wie gut es mit Delphi funktioniert. Ich habe DBISAM vor und es ist mit Volltextsuche eingebettet, aber nicht frei. Firebird ist eine andere Option, die wir in Betracht gezogen haben.

Es könnte eine Kombination geben, die das funktioniert. Was würden Sie verwenden, und wie wird es bewertet für 1) Footprint, 2) Volltextsuche, 3) Free/Open Source.

UPDATE: Danke an alle für Ihre Vorschläge. So viele gute Möglichkeiten zur Auswahl.

+0

+1 Ich bin sehr daran interessiert, was herauskommt. " –

+0

Ich hörte den Podcast, ich würde mit Firebird gehen, und vielleicht eine Lucene (die Java Lucene oder Dotlucene) als FTS (Delphi kann mit irgendetwas verbinden). Firebird würde erlauben jemand, der entweder die volle oder die eingebettete db verwendet (full fb mit mehreren Benutzern könnte interessant werden ...) –

Antwort

8

Ich hatte eine Menge Erfolg mit DiSQLite. Es hat FTS-Unterstützung und eine Menge anderer Funktionen. Sie haben eine kostenlose Version und eine Professional-Version. Ich glaube, die Free-Version macht auch FTS. Ich habe viele der SQLite-Implementierungen für Delphi ausprobiert und dies ist das Beste, was ich gesehen habe. Es kompiliert direkt in Ihre Anwendung, also gibt es keine externen DLLs.

Ich habe mir viele der freien Bibliotheken für eingebettete Datenbanken in Delphi angeschaut und viele werden nicht mehr unterstützt, wurden nie veröffentlicht oder funktionieren nur in Delphi5.

+0

DiSQLite sieht wirklich gut aus. Vielen Dank! –

+0

Wie behandeln Sie die Groß- und Kleinschreibung in DISQLIte (mit FTS oder LIKE)? SQLIte und DISQLite behandeln die Suche nach Groß- und Kleinschreibung nur für westeuropäische Sprachen und unterstützen nur die Suche nach Groß- und Kleinschreibung bei anderen Codepages. In der Praxis sind Groß- und Kleinschreibung keine sinnvollen Suchanfragen. –

1

Warum benötigen Sie eine Volltextsuche? Ich benutze Twitter nicht, aber ich glaube, dass Twitter-Nachrichten maximal 140 Zeichen lang sind. Diese würden in ein Varchar-Feld passen. Sie brauchen keine Volltextsuche, um etwas in einem solchen Feld zu finden.

+0

Sie benötigen FTS, wenn Sie Google-ähnliche Abfragen unterstützen möchten, wie Wortnähe, Stemming usw. –

+0

ah, true. Ich habe über einfache Wortsuchen nachgedacht. – Birger

+1

Plusindexierung auf allen Wörter beschleunigen den Suchprozess unabhängig von der Indizierung des gesamten Tweets. –

0

Es gibt auch DotLucene, das erfordert, dass das .NET Framework installiert wird, aber problemlos über die .net com apis geladen werden kann. Es ist ideal für die Suche und hat ein Abfrageformat, das den meisten Suchmaschinen gemeinsam ist.

2

Wir haben DotLucene in eine unserer internen Delphi-basierten Anwendungen integriert, mit Hydra (Mike hat damals daran gearbeitet); Wenn das eine Option ist, die wir hier verfolgen wollen, bin ich mir sicher, dass wir das extrahieren und für dieses Projekt wiederverwendbar machen können.

3

Ich weiß, dass Firebird das sphinx Add-on für die Volltextsuche hat (obwohl es dort heißt " weit entfernt von der echten "Volltextsuche" '), es ist kostenlos/Open Source, aber ich finde keine Informationen zu sagen, wenn es mit der eingebetteten Version von Firebird funktioniert.

1

Ich würde vorschlagen, dass DBISAM, oder jetzt wahrscheinlich ihre neuere ElevateDB, stark in Betracht gezogen werden sollte. Von Ihrer vorherigen Erfahrung erwarte ich, dass Sie wissen, dass es Ihrer ausführbaren Datei nicht viel hinzufügt, dass es eine relativ schnelle, zuverlässige, perfekte Delphi-basierte Lösung ist und exzellenten Support bietet. Im Laufe der Jahre wurde ihr SQL-Dialekt verfeinert, so dass sie jetzt sehr schön ist und einen hohen Grad an ANSI SQL-2003-Konformität aufweist.

DBISAM/ElevateDB ist, wie Sie beachten, nicht Open Source, aber die Lizenzkosten sind pro Entwickler nur (nicht pro Bereitstellung), wenn es nur ein paar Entwickler beteiligt sind die Kosten (meiner Meinung nach) vernachlässigbar.Die Lizenzkosten sind besonders angemessen, wenn Sie die Unterstützung und Reaktionsfähigkeit von DBISAM/Elevatesoft Newsgroups in Betracht ziehen, in denen der Hauptentwickler/Eigentümer (Tim Young) aktiv an der Beantwortung von Fragen und der Lösung von Problemen beteiligt ist. Neben den Kosten für eine proprietäre Lösung gibt es natürlich auch Bedenken, ob das Geschäft überleben wird und Produkte in Zukunft weiter entwickelt und unterstützt werden. Das ist etwas, was Sie für sich selbst abwägen müssen, aber die Entwicklung scheint so stark wie immer. Sie haben .NET-Provider für ihre Datenbanken und unterstützen Cross-Plattform-Entwicklung mit FreePascal/Lazarus.

Ein Plus zu DBISAMs Volltextsuche ist, dass es eng in SQL integriert ist. Das heißt, Sie können eine einzelne SELECT-Anweisung ausgeben, die gewöhnliche WHERE-Kriterien für einige Felder direkt mit Volltextsuchkriterien für andere kombiniert. Abhängig von Ihren Bedürfnissen ist dies eine nette Funktion, die es wirklich einfach und schnell macht, Dinge zu tun, die mehr Arbeit mit einer anderen Volltextlösung erfordern. Ich denke, die meisten Add-On-Lösungen, wie Lucene und andere, die mit Firebird verwendet werden können, integrieren sich nicht so gut mit regulärem SQL und beschränken Sie darauf, nur Datensätze mit Volltext-Kriterien abzurufen. Etwas wie das proprietäre Add-on für Firebird (http://www.textolution.com/ftsib_example.asp) von Textolution sieht so aus, als könnte es die Konstruktion einer einzelnen komplexen (verschachtelten) Abfrage ermöglichen, die sowohl reguläre als auch Volltextkriterien anwendet, aber DBISAM macht es eleganter. Und das Hinzufügen eines proprietären Add-ons zu einer Open-Source-Datenbank verhindert sowieso den Zweck, Open Source zu werden.

Ein Nachteil der Volltextsuche von DBISAM/ElevateDB ist meiner Meinung nach, dass nur die Verwendung von 'AND' und 'OR' Bedingungen unterstützt wird, es gibt keine Proximity Suche.

Ich stelle fest, dass es eine Volltextlösung für SQLite gibt, http://www.sqlite.org/cvstrac/wiki?p=FullTextIndex. Ich habe noch nie SQLite benutzt, aber ich weiß, dass viele Leute es lieben. Ein Bereich, in dem ich mir ziemlich sicher bin, dass DBISAM/Elevatesoft große Vorteile hat, sind Multi-User-Anwendungen, bei denen eine robuste Sperrfunktionalität erforderlich ist, die jedoch für Einzelplatz-Desktop-Apps nicht unbedingt Gewicht haben.

2

Gehen Sie voran mit SQLite. Es gibt viele kostenlose SQLite-Komponenten für Delphi. Einige von ihnen haben aufgehört, aktive Projekte zu sein. Aber eine Komponente der Notiz ist ZeosDB. ZeosDB wird aktiv gepflegt und seine sqlite Unterstützung ist auch perfekt. Falls Sie eine andere DB Engine Unterstützung benötigen, ist ZeosDB wieder die Antwort (es unterstützt MySQL, PostgreSQL, Interbase, Firebird, MS SQL, Sybase, Oracle und SQLite).

1

Ich würde mit SQLite Aducom Sqlite Komponenten, sie sind einfach mit SQLite zu arbeiten, als DiSQLite, frei und arbeite als TDataset Komponenten, würde ich für SQLite stimmen, weil:

  1. Es ist sehr schnell und kompakt Datenbank.
  2. Sehr kleine Stellfläche, nur rund 200kb Dll.
  3. Es kann statisch verbunden werden, wenn es mit Aducom-Komponenten verwendet wird, also keine Notwendigkeit, die DLL zu verteilen.
  4. Es hat Unterstützung für die Volltextsuche eingebaut.
  5. Es ist wild verwendet und in vielen freien und kommerziellen Anwendungen als externer Speicher verwendet.
  6. Es hat die meisten Standard-SQL, so dass die meisten Ihrer Kenntnisse in SQL verwendet werden.
1

Sqlite ist so ziemlich nur Single-User/Single-Verbindung. Durch ein Update wird die gesamte Datenbank gesperrt. Sie behandeln dies, indem Sie einen Zeitüberschreitungswert für andere Verbindungen festlegen, die warten sollen (Standardwert ist kein Zeitlimit). Der Zugriff für mehrere Benutzer kann sehr langsam werden und/oder häufige Timeouts geben, je nachdem, welchen Wert Sie verwenden.

Ich habe die Asqlite-Komponenten von http://www.aducom.com/ verwendet. Kostenlos und Open Source. Derzeit unterstützt d2009 das Aussehen nicht, aber es ist in der Entwicklung. Es gibt eine Reihe anderer Komponentensätze, aber ich habe keine anderen verwendet.

Sie können jeder Delphi-App eine Volltextsuche mit Rubicon hinzufügen (jetzt unter der neuen Verwaltung unter http://www.href.com/rubicon). Dies ist jedoch nicht frei :(

-1

DBISAM den ganzen Weg. Works, sehr solide, eingebettet ist, die Volltextindizierung große Werke (umfangreiche persönliche Erfahrung!)

ElevateDB prob ist auch toll, aber ich habe keine direkte Erfahrung mit ihm.

4

Sybase Advantage Database Server hat einen passenden lokalen Server-Engine (multi-threaded und Rekordsperren), große Delphi TDataSet Nachkomme Komponenten (Quellcode enthielt) und eine große Volltext-Suchmaschine.

Vorteil Die Volltextsuche unterstützt Operatoren AND, OR, NOT und NEAR ovides SCORE und SCOREDISTINCT skalare Funktionen, die die Gesamtzahl aller Instanzen von Wörtern in der Suchbedingung zurückgeben.

Die Volltextindizes für Advantage werden zum Zeitpunkt der Datensatzaktualisierung beibehalten, was bedeutet, dass keine Neuerstellungen erforderlich sind. Die Indizes sind in einem komprimierten Format; Daher kann die tatsächliche Indexgröße viel kleiner als die physischen Daten sein. Es ist möglich, Volltextsuchen bei nicht indizierten Daten durchzuführen, dies erfordert jedoch eine physische Suche der Datensatzdaten und kann viel langsamer sein. Indizierte Suchen verwenden Bitmap-Filter für optimale Leistung.

Die Online-Hilfe enthält alle Details bis Indizierungsoptionen, etc .:

http://tinyurl.com/ctjoqg

0

Ich habe eine semi-Arbeits Delphi Lösung hier: http://sourceforge.net/projects/mutis/, einen Port zu Delphi von Lucene.

Die mayority es gut funktionieren, aber unfortunally in den Tod Delphi.NET Umsetzung so requiere Arbeit Einheimische zu aktualisieren beruhte (ja, war ein großer Fehler, die .NET-Route nehmen :()