Frage

Ich habe eine Notwendigkeit, die verteilte Suche über eine ziemlich große Menge von kleinen Dateien (~ 10M) mit jeder Datei ein Satz von key: value Paaren zu sein. Ich habe eine Reihe von Servern mit insgesamt 56 CPU-Cores für diesen - diese sind meist Dual-Core und Quad-Core, sondern auch eine große DL785 mit 16 Kernen

.

Das System benötigt für Online-Abfragen zu gestalten, ist ich idealerweise einen Web-Service zu implementieren suchen, die auf Anforderung JSON Ausgabe kehrt von einem Front-End.

Um die Sache noch komplizierter zu machen, für eine bestimmte Suche manchmal werde ich nur auf dem aussehen will letzte Version jeder Datei, aber auch andere Suche kann nur auf diese Versionen von Dateien anwenden, die auf einem existierte bestimmte Datum.

Ich habe auf Hadoop sieht, aber die Verwaltung ist ziemlich schrecklich, und die Standard-Auftragsübermittlung Methoden sind langsam. Es scheint für die Offline sehr großen Maßstab Verarbeitung ausgelegt werden, und nicht für Online-Datenverarbeitung.

CouchDB sieht schön wie ein Dokument speichern und weiß über key: value Stil Dokumente und Versionierung und MapReduce, aber ich kann nichts finden, wie kann es als verteilt MapReduce-System verwendet werden. Alle der Clustering-Dokumentation Gespräche über die Verwendung von Clustering und Replikation der gesamte Datenbank für Load-Balancing, während das, was ich brauche, ist Lastverteilung .

Ich habe untersucht auch verschiedene DHTs, und während sie für tatsächlich Speichern und Abrufen von einzelnen Datensätzen in Ordnung sind, sind sie bei tun die ‚Karte‘ Teil von MapReduce im Allgemeinen schlecht. Iterieren über den gesamten Dokumentensatz ist von entscheidender Bedeutung.

Daher mein ideales System würde ein verteiltes Dateisystem wie Hadoop des HDFS umfasst, mit den Web-Service-Funktionen von CouchDB.

Kann mir jemand in Richtung etwas zeigen, die helfen könnten? Implementierungssprache ist nicht zu viel von einer Besorgnis, mit der Ausnahme, dass es unter Linux ausgeführt werden muss.

War es hilfreich?

Lösung

Es scheint, wie das Problem Domain besser zu einer Lösung wie Solr geeignet wäre. Solr bietet http Schnittstellen zu anderen Anwendungen, auch JSON . Sie könnten die Suche auf mehreren Rechnern partitionieren oder eine einzelne Kopie über Maschinen für den Lastenausgleich (Master / Slave) verteilen. Es würde davon abhängen, was für Ihre Daten am besten funktioniert. Aber in meiner Erfahrung für die Echtzeit-Suchergebnisse, Lucene / Solr wird jedes System auf einer Karte basierend schlagen / System reduzieren.

Es ist sehr einfach Solr in eine Anwendung zu integrieren und inkrementelles Updates zu tun. Es hat nicht wirklich eine Ahnung von Versionierung though. Wenn das wirklich notwendig ist, können Sie es finden, um eine andere Art und Weise zu heften auf.

Andere Tipps

Ich kann ein wenig verwirrt sein, was Ihre Anwendung benötigt werden, die Sie erwähnen, um durch Schlüssel / Wert-Paare suchen zu können, wo Solr eine große Anwendung wäre. Aber Sie auch benötigen, erwähnen die Karte Teil der Karte zu verwenden / reduzieren, und dass Sie benötigen 10 Millionen Dokumente zu scannen. Ich bin nicht sicher, ob Sie gehen, eine Lösung zu finden, die 10 Millionen Dokumente scannen und zurückgehen in einer Online-Mode (im Millisekundenbereich). Aber eine andere Lösung ist zu sehen HBase . Dies baut auf der HDFS und ermöglicht es Ihnen Karte reduzieren Arbeitsplätze von der Art, die Sie wollen, Millionen kleinerer Gegenstände laufen. Aber ein Job wird nicht submittable sein und überall in der Nähe von der Zeit für Sie suchen beendet in.

Im Moment habe ich einen Test HBase mit RSS-Elementen (2M Artikel, mehr Kb pro Stück) einrichten. Insgesamt DB Größe ist ~ 5 GB. Es gibt mehr Jobs, die gegen diese DB laufen alle Elemente scannen und dann Ausgabe von Ergebnissen. Der Cluster scannt Elemente bei ~ 5.000 / Sekunde, aber es dauert noch etwa 10 Minuten einen Job zu beenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top