Welche Art von Datenbankverbindung verwenden Sie? Bei einigen Datenbanken können Sie eine direkte Verbindung herstellen, anstatt eine TCP-Netzwerkverbindung zu verwenden, die den Netzwerkstapel durchläuft. Mit anderen Worten, wenn Sie eine Internetverbindung herstellen und Daten auf diese Weise senden, kann dies die Arbeit verlangsamen.
Eine weitere Möglichkeit, die Leistung einer Datenbankverbindung zu verbessern, besteht darin, SQL-Anweisungen in einem einzigen Befehl zusammenzufassen.
Zum Beispiel eine einzelne 6000 Linie SQL-Statement, das wie dieses
"update words set count = count + 1 where word = 'the'
update words set count = count + 1 where word = 'in'
...
update words set count = count + 1 where word = 'copacetic'"
und führen Sie das als einen einzigen Befehl aussieht, wird die Leistung viel besser sein. Standardmäßig hat MySQL eine 'Paketgröße' Grenze von 1 Megabyte, aber Sie können das in der Datei my.ini ändern, wenn Sie möchten.
Da Sie Ihre Datenbankaufrufe über ActiveRecord abstrahieren, haben Sie nicht viel Kontrolle darüber, wie die Befehle ausgegeben werden. Daher kann es schwierig sein, Ihren Code zu optimieren.
Eine andere dünne Sie könnte wäre, um eine Zählung der Wörter im Speicher zu halten, und dann nur die endgültige Summe in die Datenbank einfügen, anstatt dann ein Update jedes Mal, wenn Sie auf ein Wort stoßen. Das wird wahrscheinlich eine Menge an Beilagen einsparen, denn wenn Sie jedes Mal ein Update machen, wenn Sie auf das Wort "das" stoßen, ist das eine riesige, riesige Verschwendung. Wörter haben eine "Long Tail" -Distribution und die gebräuchlichsten Wörter sind sehr viel häufiger als obskurere Wörter. Dann würde der zugrunde liegenden SQL aussehen wie folgt aus:
"update words set count = 300 where word = 'the'
update words set count = 250 where word = 'in'
...
update words set count = 1 where word = 'copacetic'"
Wenn Sie sich Sorgen machen über zu viel Speicher aufnehmen, können Sie Wörter zählen konnte und in regelmäßigen Abständen ‚Flush‘ sie. Lies also ein paar Megabyte Text, verbringe dann ein paar Sekunden damit, die Summen zu aktualisieren, anstatt jedes Wort jedes Mal zu aktualisieren, wenn du darauf stößt. Wenn Sie die Leistung verbessern wollen noch mehr, sollten Sie SQL-Befehle in Chargen Ausgabe betrachten direkt
Schreiben sogar alle Datensätze am Ende, es trifft die Datenbank 6000 mal ... und dauerte eine ganze Weile. Ich dachte an mehr als 10, 15 Sekunden max. Wenn ich alle Daten in eine flache Datei schreibe, sollte es nur 1 oder 2 Sekunden dauern. kann ich sqlite3 nicht abschalten, um jedes Mal "erzwinge" in die db zu schreiben, sondern schreibe es einmal nach dem Einfügen von Datensätzen? –
schauen Sie auf meine Antwort, mit Masseneinsatz sollte es beschleunigen. –