Momentan verwende ich Ruby PStore
um große Objekte (> 1GB) auf der Festplatte zu speichern. Leider scheint die Größe des PStore bei ca. 2GB begrenzt zu sein und dies reicht für meine Anwendung nicht aus.Ruby PStore vs Postgres
Ich habe dann begonnen, mit Postgres 9.5 + PostGIS zu experimentieren. Dies würde es erlauben, mehr Daten zu speichern und zusätzlich einige räumliche Operationen durchzuführen, die ich in Zukunft benötigen werde. Ich benutze pg-0.18.4 auf einem MacBook Pro (16GB) mit Yosemite.
Zu meiner Überraschung (ich bin kein Datenbankexperte) ist der Leistungsverlust enorm. Als Beispiel:
- PStore auf der Festplatte zu schreiben: 130.428481s
- DB-Einsätze: 4280.366986s
Um Ihnen weitere Informationen, das ist mein Skript die Tabelle zu erstellen:
CREATE TABLE public.radiation(
id integer NOT NULL,
time timestamp with time zone NOT NULL,
surface_total_shortwave double precision,
person_total_shortwave double precision,
mean_radiant_temperature double precision,
cell_id integer
) WITH (OIDS=FALSE)
Jede Zeile der Tabelle repräsentiert einen bestimmten berechneten Wert an einer bestimmten Stelle auf einem Netz (cell_id) zu einem bestimmten Zeitpunkt (Zeit).
Die INSERT
ist (in Ruby):
INSERT INTO radiation (
id,
time,
surface_total_shortwave,
person_total_shortwave,
mean_radiant_temperature,
cell_id
) VALUES (
#{id},
'#{time}',
#{surface_total_shortwave},
#{person_total_shortwave},
#{mean_radiant_temperature},
#{cell_id}
)
Gemäß Empfehlungen hier, alle Schlüssel, Indizes, Trigger usw. deaktiviert sind. Alle INSERT
sind innerhalb einer einzigen Transaktion.
Wenn die Abfrage so geändert wird, dass statt einer Zeile pro Cell_ID zu speichern, speichern ich die volle Array (double precision[]
), die INSERT
Zeit wird vergleichbar mit PStore, aber ich verliere die räumlichen Fähigkeiten (glaube ich).
Meine Frage ist. Ist das normal? Kann die Leistung auf gewisse Weise verbessert werden? Vielleicht binäre Daten speichern?
Würde es einen Unterschied machen, direkt mit libpq zu C zu wechseln?
Vielen Dank für Ihren Rat. Einfach auf 'SQLite' zu wechseln (in der Datei, da ich die Daten speichern muss), hat die Leistung enorm gesteigert. Mein mittelfristiger Plan ist, [Sequel] (http://sequel.jeremyevans.net/) zu verwenden. Das Hinzufügen von "vorbereiteten Aussagen" hat mich zusätzlich um 50% verbessert. – Rojj
Schreiben in Stapeln (wenn möglich) könnte auch die Geschwindigkeit sehr profitieren, siehe die Antwort, die ich hier schrieb http://StackOverflow.com/Questions/38332004/Processing-Big-amount-of-csv-files/38332342#38332342 Könnten Sie bitte die Antwort akzeptieren? – peter