2009-04-25 11 views
1

Meine Anwendung speichert Standortdaten von GPS-Eingängen. Beim Importieren einer GPX-Datei kann ein Benutzer zwischen 500 und 10.000 GPS-Datenpunkte haben. Im Moment habe ich ein Modell für jeden Trackpoint. Es funktioniert gut, aber beim Einfügen ist es LANGSAM. 30+ Sekunden für die 10.000 Datenpunkte. Gibt es einen besseren Weg zum Masseneinfügen?Schnellere/Massen-ActiveRecord-Erstellung

Die ganze Zeit wird auf der SQL-Seite verbracht - jeder Einsatz ist schnell, aber 10.000 summieren sich schnell. Jeder Benutzer hat möglicherweise 100 Dateien und 100 Benutzer == lange lange Einfügezeiten. Natürlich nicht auf einmal.

Ich würde gerne die Anwendungsarchitektur ändern, wenn das helfen würde, nur nicht sicher, welche Alternativen ich hier habe. Ich benutze die GPS-Daten nur als Einheit. Ich suche nie nach einem Datensatz in der Menge, also ist der gesamte ActiveRecord übertrieben.

Ich würde es hassen, ein ganzes Queue-System zu machen, nur um diesen dummen Einsatz zu bewältigen.

Antwort

0

Ich habe das überlegt und meine zwei Optionen scheinen einen Hash zu einem Blob in der DB zu serialisieren oder anderswo zu speichern. Ich habe keinen FS Zugang, könnte aber S3 benutzen.

Also ich nehme an, ich habe meine Frage geändert. Zum Speichern von 100kb-Objekten, die nach der Erstellung so gut wie schreibgeschützt sind, gibt es Feedback zu allgemeinen Prinzipien von S3 und Blob Storage?

Ich denke, this thread deckt wahrscheinlich, was ich für jetzt suche!

2

Verwenden ar-Erweiterungen des Import-Methode sie alle auf einmal zu importieren: http://github.com/zdennis/ar-extensions/blob/master/ar-extensions/lib/ar-extensions/import.rb#L49-215

Das Problem ist, dass, wenn Sie jeden Datensatz importieren, indem Sie einen #save tun, Sie sind in der Tat pro Zeile eine Insert-Anweisung erstellen, und ruft alle der Validierungen Ihres Modells. Sie können stattdessen eine größere SQL-Anweisung erstellen, die alle Daten gleichzeitig überträgt.