Nach einem unglücklichen Missgeschick mit MySQL habe ich es schließlich aufgegeben, es zu benutzen.
Was ich habe?
Große Menge von Dateien im folgenden Format:
ID1: String String String String
ID2: String String String String
ID3: String String String String
ID4: String String String String
Was ich getan habe?
Ich habe MySQL auf einem leistungsstarken Rechner verwendet, um alles in eine Datenbank in der folgenden Form zu importieren:
ID1 String
ID1 String
ID1 String
ID1 String
...
...
Was ist passiert?
Der Datenbankimport war erfolgreich. Die Indizierung schlägt fehl, weil sie offenbar mehr als 200 GB für 2 Milliarden Datensätze benötigt. Eine vernünftige Forderung, aber ich habe einfach nicht so viel Platz, denn die Tabelle selbst belegt nach der Normalisierung etwa 240 GB.
Was ich zu tun gedenke?
Ich habe einen Cluster von 20 Knoten mit etwa 80 GB Zugriff für alle zusammen (alle haben einen NFS-Mount). Ich habe die Knoten für verteiltes Rechnen eingerichtet, indem ich Parallele Python . Ich plane, meine Logik umzuschreiben, um die Leistung des Clusters zu nutzen.
Meine Frage:
Ich muss viele der folgenden Arten von Suchvorgängen durchführen:
Welche IDs enthalten eine bestimmte Zeichenfolge?
Nehmen wir zum Beispiel eine beliebige Zeichenkette: "String1", muss ich wissen, dass sie in "ID1, ID2234" enthalten ist.
Ich kenne im Moment zwei Methoden:
- Mit python grep aufrufen
- Jede der 20 Knoten übernimmt die Kontrolle über eine Reihe von Dateien und sucht bei einer Suchanfrage durchsucht die zugehörigen Dateien.
Kann jemand einen guten Ansatz vorschlagen, um diese ansonsten ineffiziente Aufgabe zu beschleunigen?