Perfomante Suche in grosser Datei

Status
Nicht offen für weitere Antworten.

Grasstampfer

Gesperrter Benutzer
HI,

ich bin auf der suche nach einer performanten (im sinne von geschwindigkeit) Suchmoeglichkeit in grossen dateien.

Ich habe folgendes:

Eine 1.5Gb grosse tab-delimited text datei in der einfache Strings stehen ala

Code:
ID1_1   ID1_2  ID1_3  ID1_4 .... 
ID2_1   ID2_2  ID2_3  ID2_4 .... 
ID3_1   ID3_2  ID3_3  ID3_4 ....

nun will ich eine suche implementieren die eine beliebige ID bekommt und die entsprechende Zeile der Datei ausgibt.

Die simpelste Loesung ist zeilenweise die datei einzulesen und ueber contains abzufragen, was aber schon 2min dauern kann.

Eine idee die ich hatte war das file in x files zu splitten (nach z.b. 100000 zeilen) und fuer jede dieser datei einen eigenen Thread zu starten, der auch wiederum zeilenweise seine datei durchliest. Findet ein Thread den Suchbegriff, so stoppen alle anderen und die zeile wird zurueckgegeben.

Nun ist es aber so, je mehr threads ich starte, desto laenger braucht er a) das ganze System zu starten (bis alle threads laufen) und b) die einzelenen leseoperationen scheinen laenger zu dauern. Je weniger Threads ich habe desto groesser sind die dateien und ich komme wieder an loesung 1 ran.

und auch hier ist es so, dass wenn der suchbegriff weit unten in irgendeiner datei steckt das suchen 20-30 sekunden dauern kann.

Nun meine Frage - muss ich damit leben oder hat jemand eine tolle Idee, wie ich eine performantere suche implementieren kann ? bin fuer jeden vorschlag offen :)

Ich kann ohne probleme das file vorher prozessieren, die suche selber sollte nur so schnell wie moeglich sein.

Eine DB zu nutzen waere der letzte ausweg ....

danke euch vielmals !
Gras
 

Wildcard

Top Contributor
Nimm Lucene. Damit lässt du dir einen Index erstellen, die eigentlich Suche dauert Bruchteile von Sekunden.
 

DocMcFly

Bekanntes Mitglied
Eine DB zu nutzen waere der letzte ausweg ....

Auch wenn das der letzte Ausweg ist... es muss ja nicht immer ein großes DB-System sein: hSqlDb oder H2 ist Datenbanken die nur aus einem Treiber bestehen und auch recht flott arbeiten. - Wenn man die Daten wo möglich später noch bearbeiten will - ist eine DB vielleicht doch von Vorteil...

Mein ja bloß... Gruß Clemens
 

Grasstampfer

Gesperrter Benutzer
das mit der DB hat logistische gruende - aber danke nochmal fuer den hinweis.

da lucene gerade seinen index baut haette ich noch ne kurze frage dazu - vielleicht liest das eine hier kurz der dazu was sagen kann.

ich indiziere gerade jede zeile - die andere moeglichkeit waere die einzelenen eintraege (als zb ID1_1, ID1_3), also nicht die komplette zeile sondern die ids, nach denen ich dann auch suchen werde.

was ist besser vor allem unter dem gesichts punkt dass es bis zu 7 eintraege pro zeile sind die interessant sein koennten.

Danke euch mal wieder !
 

Wildcard

Top Contributor
Du solltest indizieren was für dich interessante Informationen sind. Meistens sind zum Beispiel Wörter interessant bei regulären Textsuchen, Zeilen machen für mein empfinden eigentlich keinen Sinn. In deinem Fall also tatsächlich die IDs aus den Zeilen extrahieren.
Falls die Dateien auch von ausserhalb manipuliert werden und du denn index immer aktuell halten willst, würde ich dir noch die Kombination mit JNotify ans Herz legen. JNotify sagt dir bescheid sobald die Datei verändert wird, dann lässt du Lucene nochmal indizieren und schon ist alles wieder aktuell.
 

Grasstampfer

Gesperrter Benutzer
danke dir wildcard - das habe ich mir schon mittlerweilen selbst erschlossen dass es sinnvoll ist das zu indizieren was ich suchen will. und da man ja dem dokument auch eintraege (z.b. die zeile) geben kann ohne es zu indizieren erhalte ich ja noch sehr gut die kompletten informationen.

Die Datei wird nicht von aussen manipuliert, sie wird in einem update prozess einmal die woche geupdated, da lasse ich dann Lucene erneut drueber laufen.

Danke dir vielmals !
 

Grasstampfer

Gesperrter Benutzer
mhm laut lucene faq

Instead of indexing many small text fields, aggregate the text into a single "contents" field and index only that (you can still store the other fields).

somit ist es wahrscheinlich sinnvoll die relevanten IDs zusamenzufassen und diese zu indizieren, jedoch nicht die gesamte zeile.

hab mich momentan fuer diese loesung entschieden

Code:
IndexWriter index = new IndexWriter( "/home/data/iproclass/lucene2", new StandardAnalyzer(), true );
        // IndexWriter index = new IndexWriter( directory, new StandardAnalyzer(), false );
        BufferedReader reader = new BufferedReader( new FileReader( "/home/data/iproclass/iproclass.tb" ) );

        String line;
        Document document;
        StringBuilder idBuilder;
        while ( ( line = reader.readLine() ) != null ) {
            String[] split = line.split( "\t" );
            idBuilder = new StringBuilder();
            document = new Document();
            idBuilder.append( split[ 0 ] ).append( " " );
            idBuilder.append( split[ 1 ] ).append( " " );
            idBuilder.append( split[ 3 ] ).append( " " );
            idBuilder.append( split[ 4 ] ).append( " " );
            document.add( new Field( "content", idBuilder.toString(), Field.Store.NO, Field.Index.TOKENIZED ) );
            document.add( new Field( "line", line, Field.Store.COMPRESS, Field.Index.NO ) );
            index.addDocument( document );
        }
        index.optimize();
        index.close();
die relevanten IDs werden zusammengefuegt und nicht gespeichert, aber indiziert. Die komplette zeile die dann relevant ist dafuer gespeichert aber nicht indiziert.

Somit sollte ich dann ueber die IDs schnell suchen koennen und dann ueber 'line' die gesamte zeile erhalten.

ist das richtig durchdacht ?

Danke
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Suche nach String mit unbekannten characters Allgemeine Java-Themen 53
M Binäre Suche Allgemeine Java-Themen 6
M geometrische Suche Allgemeine Java-Themen 8
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
I HTML / XHTML Seite nach Excel exportieren. Suche Lib Allgemeine Java-Themen 12
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
W Collections Suche Collection, um Strings mit Indizees versehen Allgemeine Java-Themen 47
O Suche Scripter für alt:V Project! Allgemeine Java-Themen 0
D Suche Quellcode! Allgemeine Java-Themen 8
O Suche Unterstützung für ein OpenSource-Projekt (grafischer Editor) Allgemeine Java-Themen 13
B Bei Email: FW / AW... - Hilfe bei String suche Allgemeine Java-Themen 21
J Suche Alternative zu Jasper Reports Allgemeine Java-Themen 4
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
M Suche Alternative zu JFreeChart Allgemeine Java-Themen 11
S Warmup für Lineare-Suche mit Zeitmessung Allgemeine Java-Themen 2
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
B Suche nach einem Testprogramm für meine BA Allgemeine Java-Themen 0
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11
O Suche größeres Beispiel für WebserverAnwendung mit Java Allgemeine Java-Themen 2
G Google-Suche ist nicht auslesbar?! Allgemeine Java-Themen 18
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
L Suche nach CalDav Server API Allgemeine Java-Themen 0
HarleyDavidson Best Practice Suche "Container" für Modulapplikationen Allgemeine Java-Themen 0
S Suche Konzept: Korrektheit des Aufrufers feststellen Allgemeine Java-Themen 7
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
B Suche geeignete Datenstruktur Allgemeine Java-Themen 5
L Erste Schritte Suche Java Wiki System? Allgemeine Java-Themen 5
L Suche Geräte für Java SE Embedded Allgemeine Java-Themen 0
S Rekursive Suche in einem Netz Allgemeine Java-Themen 5
F Über Java Google Suche nutzen Allgemeine Java-Themen 11
A Suche Android Programmierer Allgemeine Java-Themen 0
W Suche Framework zur Prüfung von IPv4 und IPv6 Allgemeine Java-Themen 2
A Java - Suche nach Datensatz mit DateChooser Allgemeine Java-Themen 0
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
M Suche Framework/API für Monitoring-Anwendung Allgemeine Java-Themen 3
F Suche kostenlose GUI für Eclipse Allgemeine Java-Themen 10
H Suche mit Wildcards und boolschen Operatoren Allgemeine Java-Themen 4
B Suche passende Datenstruktur für 2 Einträge Allgemeine Java-Themen 19
A Binäre Suche im Array mit StackOverflowError Allgemeine Java-Themen 3
T Verkettete Suche Allgemeine Java-Themen 6
S RxTx - langsame Port suche Allgemeine Java-Themen 3
D Suche Matrix Libraries Allgemeine Java-Themen 11
S Suche Dependency Injection Container Allgemeine Java-Themen 6
J Suche: Tool zum Auffinden gleichnamiger Klassen (Name und Package gleich) in unteschiedlichen JARs Allgemeine Java-Themen 5
BinaryLogic Input/Output Suche Wörterbuch-Datei Einzahl/Mehrzahl Allgemeine Java-Themen 2
A Suche Algorithmus zum Erstellen eines planaren Graphen Allgemeine Java-Themen 5
D Suche Librarys ähnlich datatables.net + Login Allgemeine Java-Themen 3
Gossi Threads Suche ein (einfaches) Beispiel Allgemeine Java-Themen 5
P Erste Schritte Suche in ArrayList mit Maps Allgemeine Java-Themen 4
F Suche Performanceoptimierung bei Stringsortierung Allgemeine Java-Themen 51
B Suche Datenquelle für lizenz-informationen Allgemeine Java-Themen 5
J Lucene suche in Json (CouchDB) Allgemeine Java-Themen 2
X Suche Softwareimplementierung von Cryptographischen Algorithmen Allgemeine Java-Themen 3
S Suche Tipps für Einstieg in JavaCC Allgemeine Java-Themen 2
R Suche in logfiles mit Lucene / Solr Allgemeine Java-Themen 2
P Suche Datenstruktur Allgemeine Java-Themen 2
M Suche Java-Projekt zum Thema Elektrotechnik Allgemeine Java-Themen 6
F Suche Begriff Allgemeine Java-Themen 2
hdi Suche Icon-Sammlung Allgemeine Java-Themen 7
G Suche "richtiges" Framework/Library Allgemeine Java-Themen 14
slawaweis Suche Klassen für Event Managment und Time Allgemeine Java-Themen 2
P Probleme mit wikipedia quellcode zur binären Suche Allgemeine Java-Themen 6
C Suche Permutationsalgo Allgemeine Java-Themen 6
E Suche nach Foto-Dummy Allgemeine Java-Themen 8
B Suche Paket zum auslesen von Metadaten von Bildern. Allgemeine Java-Themen 4
N suche globale Tastenabfrage Allgemeine Java-Themen 6
P SUCHE: gute Geo Library (freeware) Allgemeine Java-Themen 2
P Suche performante PDF Library Allgemeine Java-Themen 20
data89 Bilder mit Java prüfen - suche dringend Hilfe Allgemeine Java-Themen 8
faetzminator Regex zur Suche von "value-losen" Attributen in HTML Tags Allgemeine Java-Themen 7
S Suche im JTree nach Neuaufbau Allgemeine Java-Themen 4
W Problem bei der Suche (binarySearch) vom deutschen Sonderzeichen "ß" im einem Array Allgemeine Java-Themen 6
D Suche nach passender Datenstruktur Allgemeine Java-Themen 4
S suche library die diagramme darstellen kann Allgemeine Java-Themen 2
T Suche Anhaltspunkt für plattformübergreifende, "unique machine id" ... Allgemeine Java-Themen 12
P WebSerive Suche Allgemeine Java-Themen 15
hdi Suche nach Begriff aus der Programmierung Allgemeine Java-Themen 11
X Suche Java Klasse die Feiertage berechnen kann Allgemeine Java-Themen 2
B suche Deutsche Übersetzung für neuste Eclipse Version Allgemeine Java-Themen 6
Daniel_L Suche nach ganzen Wörtern (wholeword) in Strings? Allgemeine Java-Themen 4
G Regex-Suche nach Worten Allgemeine Java-Themen 3
Antoras Suche Projektarbeit für Gruppe mit 3 Leuten Allgemeine Java-Themen 5
T Suche Tool Allgemeine Java-Themen 11
D Suche sowas wie Map nur für mehrere Werte Allgemeine Java-Themen 13
D Suche Hilfe zum Rechnerübergreifenden Dateizugriff. Allgemeine Java-Themen 3
M suche speziellen Sortieralgorithmus Allgemeine Java-Themen 3
E javax.comm: Suche eine open source Alternative zu rxtx Allgemeine Java-Themen 8
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
T Suche den großen Calendar Thread ! Allgemeine Java-Themen 2
P Suche Benis IP/Netzwerkadresse JTExtField Allgemeine Java-Themen 2
J Suche Doku um generischen Code zu erstellen. Allgemeine Java-Themen 9
G suche Property alternative Allgemeine Java-Themen 4
C Fehler im Quellcode. Suche in einem Baum Allgemeine Java-Themen 3
S Suche Pendant zu einem VB Befehl Allgemeine Java-Themen 2
T Suche gute JAVA Steuerelemente Allgemeine Java-Themen 2
V Suche RegEx zu (gelöstem) Problem Allgemeine Java-Themen 3
B Suche Browser-Control Allgemeine Java-Themen 4
G Suche Programmierumgebung mit Appletviewer Allgemeine Java-Themen 16
G Suche kostenlosen c++ to java converter. Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben