Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Konfigurieren Sie Lucene.Net mit SQL Server

Ja, ich habe es genau für das verwendet, was Sie beschreiben. Wir hatten zwei Dienste – einen zum Lesen und einen zum Schreiben, aber nur, weil wir mehrere Leser hatten. Ich bin sicher, wir hätten es mit nur einem Dienst (dem Writer) machen und den Reader in die Web-App und die Dienste einbetten können.

Ich habe lucene.net als allgemeinen Datenbankindexer verwendet, also habe ich im Grunde genommen DB-IDs (für indizierte E-Mail-Nachrichten) zurückbekommen, und ich habe es auch verwendet, um genügend Informationen zurückzubekommen, um Suchergebnisse oder ähnliches zu füllen, ohne die zu berühren Datenbank. Es hat in beiden Fällen großartig funktioniert, obwohl das SQL etwas langsam werden kann, da Sie so ziemlich eine ID erhalten, eine ID auswählen müssen usw. Wir haben dies umgangen, indem wir eine temporäre Tabelle erstellt haben (mit nur der ID-Zeile darin) und Bulk-Einfügen aus einer Datei (die die Ausgabe von Lucene war) und anschließendes Verbinden mit der Nachrichtentabelle. War viel schneller.

Lucene ist nicht perfekt, und Sie müssen ein wenig über den Tellerrand relationaler Datenbanken hinausdenken, weil es absolut keine ist, aber es ist sehr, sehr gut in dem, was es tut. Es ist einen Blick wert und hat, wie mir gesagt wurde, nicht die "Ups, tut mir leid, Sie müssen Ihren Index neu erstellen"-Probleme, die FTI von MS SQL hat.

Übrigens, wir haben es mit 20-50 Millionen E-Mails (und etwa 1 Million eindeutigen Anhängen) zu tun, insgesamt etwa 20 GB Lucene-Index, glaube ich, und über 250 GB SQL-Datenbank + Anhänge.

Die Leistung war, gelinde gesagt, fantastisch - denken Sie nur an Ihre Zusammenführungsfaktoren (wenn Indexsegmente zusammengeführt werden) und optimieren Sie sie. Es ist kein Problem, mehr als ein Segment zu haben, aber es kann ein GROSSES Problem geben, wenn Sie versuchen, zwei Segmente zusammenzuführen, die jeweils 1 Million Elemente enthalten, und Sie einen Watcher-Thread haben, der den Prozess beendet, wenn er zu lange dauert ... .. (ja, das hat uns eine Weile in den Arsch getreten). Halten Sie also die maximale Anzahl von Dokumenten pro Ding NIEDRIG (dh setzen Sie sie nicht wie wir auf maxint!)

BEARBEITEN Corey Trager hat hier dokumentiert, wie Lucene.NET in BugTracker.NET verwendet wird.