2017-03-31 4 views
-1

Ich habe eine Datei Text aus ~ 40 Millionen Zeilen in Form eines Schlüssel/Wert, ich möchte die Werte abgerufen werden angesichts der Schlüssel innerhalb von Sekunden (2-3) max, das tue ich nicht habe genug Speicher, um sie alle im JVM-Speicher als Hashmaps zu speichern, kann ich Systemspeicher + etwas Indexierung verwenden, um das zu erreichen? Ich habe über Lucene gelesen, aber nicht sicher, ob es das ist, was ich suche.Suche großen Textdatei

+0

https://docs.oracle.com/javase/tutorial/essential/io/file.html – Sedrick

Antwort

0

denke ich Hadoop es ist ein besseres Werkzeug für diese Aufgabe: nur die Originaldatei zwischen den Slaves aufgeteilt. Die Kartenfunktion führt eine Suche für jeden Teil der Originaldatei durch, und die Reduzierung ist die Kombination aller Ergebnisse. Wenn die Schlüssel eindeutig sind, liefert nur ein Slave die Antwort.

0

Lucene ist für Freitextsuche. Die schnellste Lösung, wenn Sie die Textdatei nicht verwenden müssen, wäre die Verwendung einer Datenbank. 40 Millionen Datensätze sind eine Menge, aber dennoch sollte ein einzelner Datensatz mit einem eindeutigen Index (auf dem Schlüssel) viel schneller als 2-3 Sekunden gefunden werden. Sie können eine eingebettete Datenbank wie HSQLDB verwenden, stellen Sie nur sicher, dass Sie sie für die Verwendung von Festplattenspeicher konfigurieren!

Wenn Sie die Textdatei zu halten brauchen, erstellen Sie eine TreeMap von Schlüssel in die Datei zu versetzen, wenn Sie, dass im Speicher kann es sich leisten. Klingt chaotisch.

1

Wenn Sie einen „Textzeichenfolge“ in dem Schlüssel oder der Wert suchen möchten Sie Apache Lucene nutzen könnten. Lucene ist eine voll ausgestattete Text-Suchmaschine Bibliothek aber Sie können es auch einfach für die Suche die genaue Übereinstimmung des Schlüssel Wert verwenden. Ich benutze Lucene mit mehr als 60 Millionen Dokumente und ich habe weniger als 1 Sekunde für jede Suche.

Andernfalls, wenn Sie wollen nur ein Schlüssel/Wert Laden Sie eine NoSQL Schlüssel/Wert-Datenbank wie Redis verwenden können, aber ich habe noch nicht versucht.

Verwandte Themen