2016-04-30 12 views
-1

Ich finde mich derzeit ziemlich einfache Berechnungen auf mehrere Millionen Datenpunkte. (Konstruieren einer großen Liste von Strings aus einer gut definierten Multi-Gigabit-Datei, Sortieren dieser Liste und Vergleichen mit einer anderen Liste, einer Obermenge.) Dies ist die Art von einfacher Arbeit, die die meisten von uns normalerweise mit den Daten vollstän- Speicher, aber die Größe und Menge der Dateneinheiten, mit denen ich arbeiten muss, könnte RAM zu einem Problem machen, wenn ich versuche, alles im Speicher zu behalten. Mir wurde schnell klar, dass ich die Daten wahrscheinlich an einigen Stellen in eine Datei schreiben musste, um die Ressourcen meines Systems nicht zu erschöpfen. Ich habe mich dafür entschieden, SQLite3 zu verwenden. (Dies ist wahrscheinlich ein bisschen viel für eine CSV.) Es ist ziemlich leicht, während seine Speichergrenzen scheinen meine Anforderungen sicher zu überschreiten.Gibt das SQLite-Ergebnis In-Memory-Datenstrukturen?

Das Problem, das ich habe, ist das Verständnis genau, wie die Ergebnismenge funktioniert. Die Dokumentation, auf die ich gestoßen bin, scheint etwas unklar zu sein. Offensichtlich schreibt SQLite nicht jedes Mal, wenn eine SELECT-Anweisung ausgeführt wird, eine vollständig neue Tabelle in die Datenbank. Bedeutet dies, dass alle ausgewählten Felder in einer vollständigen In-Memory-Tabelle dupliziert werden oder nur eine Art von Zeigern im Speicher gehalten wird (und nicht die eigentlichen Daten)? Noch etwas ganz anderes?

Ich muss in der Lage sein, die fraglichen Daten zu sortieren. Wenn die Ergebnismenge wirklich nur eine speicherinterne Datenstruktur ist, kann es einfach eine schlechte Idee sein, einfach eine neue Tabelle zu erstellen und sie mit Hilfe von ORDER BY zu füllen.

Antwort

1

SQLite hat nicht wirklich Ergebnismengen. Es verfügt über Cursor, die nur auf die aktuelle Zeile zugreifen und nicht rückwärts gehen können.

SQLite berechnet Ergebnisse im laufenden Betrieb, so dass immer nur eine Zeile im Speicher sein muss.

Wenn eine Berechnung mehrere Zeilen zugreifen muss (d.h.e Aggregatfunktionen, oder ohne einen nutzbaren Sortier-Index), so viele Daten wie möglich in den cache, gehalten und verschüttete dann in einem temporary database auf der Festplatte.