2009-07-19 14 views
1

Ich mache ein Web-Projekt basierend auf asp.net mvc-Framework. Als db verwende ich postgre SQL. Die Frage ist, wie man die Suche in meiner Anwendung organisiert. Eine Option wäre die Verwendung von .net-Bibliotheken wie lucene.net. Eine weitere Möglichkeit ist die Postgre-Volltextsuche. Was ist die beste Option?postgres Volltextsuche

Antwort

3

Ich habe keine Postgres in Produktion, aber ich habe damit auf einer Test-DB mit ziemlich signifikanten (glaube ich) Datenmengen gespielt. Durch die Indexierung von 600.000 Textzeichenreihen mit durchschnittlich 3 Wörtern wird ein Volltextindex von 120 MB erstellt. Abfragen sind sehr schnell gegen diesen Index nach der erste für jeden Suchbegriff. Es sieht so aus, als müsste der Index für jeden Term von der Festplatte in den Speicher gezogen werden. Ich habe noch keinen Weg gefunden, den gesamten Index beim Start in den Speicher zu ziehen. Ein Teil der anfänglichen Langsamkeit kann mit der Festplatten-IO in Zusammenhang stehen, da ich auf einem einzelnen Laptop HD laufe. Ich bin auch nicht sicher, ob ein 120MB-Index 120MB DB-Speicher oder mehr benötigt.

Für eine Produktions-App verwenden wir Lucene für Java und es funktioniert sehr gut - Teil-Sekunden-Antworten mit mehreren GB von Indexdaten. Der Vorteil von Lucene, den ich sehe, ist 1) dass es DB-unabhängig und 2) verteilbar ist. Für # 1 ist dies möglicherweise kein Problem, aber es bedeutet, dass Sie denselben Indexierungscode verwenden können, unabhängig davon, was Ihre zugrunde liegende DB ist. Für # 2 hängt es davon ab, wie groß die Anwendung sein würde. Lucene (und insbesondere Hadoop) sind so konzipiert, dass sie multithreadfähig sind, sodass Sie den Index auf einem freigegebenen Laufwerk speichern können und mehrere Computer gleichzeitig Suchvorgänge ausführen können (beachten Sie, dass die Indizierung weiterhin single thread ist). Ob Sie das wollen oder nicht, hängt davon ab, wie Ihre Architektur aussieht. Hättest du lieber 1 große DB oder 1 kleine/mittlere DB plus ein paar kleinere Indizierungsserver, die es unterstützen?