Frage

I haben eine Vielzahl von zeitseriellen gespeicherten Daten auf einem mehr oder weniger georeferenzierten Gitter, z.B. ein Wert pro 0,2 Grad von Breite und Länge. Derzeit werden die Daten in Textdateien gespeichert, so am Tag-of-Jahres-251 Sie können sehen:

251
 12.76 12.55 12.55 12.34 [etc., 200 more values...]
 13.02 12.95 12.70 12.40 [etc., 200 more values...]
 [etc., 250 more lines]
252
 [etc., etc.]

Ich möchte das Abstraktionsniveau erhöhen, die Leistung zu verbessern, und Zerbrechlichkeit reduzieren (zum Beispiel kann der aktuelle Code nicht einen Tag zwischen zwei bestehenden einfügen!). Wir haben um mit BLOB-y RDBMS Hacks verwirren und sogar jede Zeile des Textdatei-Formats als Zeile in einer Tabelle zu replizieren (eine Zeile pro Zeitstempel / Breite Paar, eine Spalte pro Längenzuwachs - yecch).

Wir zu einer „echten“ Geodatabase gehen könnten, aber der Aufwand für jeden einzelnen Wert mit einem lat Tagging und scheint lange unerschwinglich. Die Größe und die Auflösung der Daten nicht in zehn Jahren stark verändert und es ist unwahrscheinlich, dies zu tun.

Ich habe herum noodling mit Putting alles in NetCDF-Dateien, aber denken wir an die Datei Mentalität bekommen müssen vollständig - ich hasse es, dass alle meine Software Dateinamen von den Daten, um herauszufinden hat, mit mehreren Dateien für mehrere Jahre beschäftigen , etc .. Die Alternative, alle zehn Jahre (und Zählen) Daten in eine einzige Datei setzen, nicht praktikabel scheint auch nicht.

Jede helle Ideen oder Produkte?

War es hilfreich?

Lösung

Ich habe zusammengebaut Ihre Kommentare hier:

  1. Ich möchte alles tun, um dieses "w / o meine eigene Datei zu schreiben E / A-Code"
  2. Ich brauche Zugriff von "Java Ruby-MATLAB" und "Fortran-Routinen"

Wenn Sie diese addieren, Sie auf jeden Fall nicht ein neues Dateiformat möchten. Stick mit dem man sie hast.

Wenn wir bekommen können Sie Ihre erste Anforderung entspannen - das heißt, wenn Sie bereit wären, Ihre eigene Datei-I / O-Code zu schreiben, dann gibt es einige interessante Möglichkeiten für Sie. Ich würde C ++ Klassen schreiben, und ich würde etwas verwenden, wie SWIG Ihre neue Klassen zu den mehreren Sprachen verfügbar zu machen, die Sie benötigen. (Aber ich bin nicht sicher, ob Sie in der Lage sein würden SWIG verwenden Sie aus Java, Ruby, MATLAB und Fortran-Zugriff zu geben. Sie etwas anderes brauchen. Nicht wirklich sicher, wie es zu tun, mich selbst.)

Sie sagte auch: „Eigentlich, wenn ich Dateien haben muß, ich Text bevorzugen, weil dann kann ich nur in und von Hand bearbeiten gehen, wenn nötig.“

Ich glaube, dass dies eine irrige Aussage. Wenn Sie bereit wären, Ihre eigene Datei-I / O-Routinen dann gibt es sehr kluge Dinge, die man tun könnte ... Und als letzte Rückfall zu machen, könnten Sie sich ein Werkzeug geben, die aus dem neuen Dateiformat zu den gleichen alten konvertiert Textformat Sie gewohnt sind ... Und noch ein Werkzeug, das zurück umwandelt. Ich werde am Ende meines Posts zu sprechen kommen ...

Sie sagte etwas, das ich ansprechen möchte:

"Leverage 40 Jahre der DB-Optimierung"

Datenbanken sind für relationale Daten gemeint, nicht Rasterdaten. Sie werden nicht nutzen niemandes DB Optimierungen mit dieser Art von Daten. Sie könnten in der Lage sein, Ihre Daten in ein DB zu stopfen, aber das ist kaum das gleiche.

.

Hier ist die nützlichste ist, was ich Ihnen sagen kann, basierend auf alles, was Sie uns erzählt haben: Sie sagte dazu:

"Ich bin mehr daran interessiert, bei der Optimierung von meine Zeit als die CPU, obwohl exec Geschwindigkeit ist gut!"

Das ist ehrlich gesagt geht TOOLS zu verlangen. Stoppen Sie es als eine Textdatei zu denken. Starten Sie denken an den gemeinsamen Aufgaben, die Sie tun, und schreiben Sie kleine Werkzeuge - in UNABHÄNGIG Langauge (S) -., Um diese Dinge zu tun TRIVIAL

Und wenn Ihre Werkzeuge erweisen sich als miese Leistung haben? Ratet mal, was - es ist, weil Ihre flache Textdatei ein cruddy Format ist. Aber das ist nur meine Meinung. :)

Andere Tipps

Ich würde auf jeden Fall von Text, um binären zu ändern, aber jeden Tag in einer separaten Datei noch halten. Man könnte sie so nennt, die zwischen Insertionen in keine Fremdheit mit Indizes verursachen, wie durch das Datum und die mögliche Zeit im Dateinamen inklusive. Sie könnten auch die Dateistruktur prüfen, ob Sie mehrere Felder pro Standort zum Beispiel. Ist es üblich, für eine kleine Plättchen aus einer großen Anzahl von Zeitschritten zu suchen? In diesem Fall sollten Sie sie als Fliesen von mehreren Tagen enthalten, um Daten zu speichern. Du hast nicht erwähnt, wie auf die Daten zugegriffen werden, die eine große Rolle spielt, wie es effizient zu organisieren.

Klärungen:

Ich bin überrascht, dass Sie „Datenbank“ als eines des Tags hinzugefügt, und betrachteten es als Option. Warum hast du das getan?

Im Wesentlichen haben Sie eine 2D, bei jedem Zeitschritt einzelne Komponente Gleitkomma-Bild. Würden Sie diese Weise stimmen Ihre Daten sehen?

Sie erwähnte auch den Wunsch täglich zwischen zwei bestehenden einzufügen - das ist eine sehr seltsame Sache zu tun zu sein scheint. Warum würden Sie das tun müssen? Gibt es ein neuer Tag zwischen Mai 4 und 5. Mai, dass ich nicht wissen?

Ist „Kompression“ eines der Dinge, die Ihnen wichtig sind, oder sind Sie einfach nur krank von flachen Dateien?

Würde ein Schwimmer oder ein Doppel ausreichend sein, um Ihre Daten zu speichern, oder haben Sie das Gefühl hat mehr beliebige Genauigkeit benötigen?

Auch, was Programmiersprache (n) haben Sie auf diese Daten zugreifen wollen mit?

Ihre Antwort, wie die Daten zu speichern, hängt ganz davon ab, was Sie mit den Daten tun werden. beispielsweise müssen, wenn Sie immer nur durch die Angabe des Datums oder einen Datumsbereich abrufen, dann in einer Datenbank gespeichert werden als BLOB etwas Sinn macht. aber wenn Sie benötigen Datensätze zu finden, die bestimmte Werte haben, müssen Sie etwas anderes tun.

Sie beschreiben, wie Sie müssen in der Lage sein, auf die Daten zuzugreifen /

Matt, Dank sehr viel, und ebenfalls longneck und jirv.

Dieser Beitrag wurde teilweise ein Experiment, um die Qualität des Stackoverflow Diskurses zu testen. Wenn ihr / gals / alien lifeforms repräsentativ ist, bin ich verkauft.

Und auf den Punkt, Sie haben mein Denken erheblich geklärt. Geist, könnte ich immer noch nicht unbedingt implementieren Ihre Ratschläge, aber weiß, dass ich sein Denken über sie sehr ernst. >; -)

Ich kann sehr gut das Dateiformat des gleiche verlassen, füge den noch vorhandenen C und / oder Ruby-Routinen auf den wenigen Low-Level-Funktionen, tack I (zB Einfügen von fehlenden Zeitschritten) fehlen, und hängen Sie eine HTTP-Front auf dem Ende ganze so, dass die Daten durch verbraucht werden können, was auch immer Box braucht es, in welcher Sprache zur Zeit hoopy ist. Während es meist unveränderlich Legacy-Software ist, dass diese Daten konstruieren, sind wir immer wieder neue Verbraucher für sie kommen, so dass die mehrsprachige / Multi-Computer-Anforderung (gee, habe ich vergessen, dass man?) Gilt für die Leseseite, nicht die Schreibseite. Das vermeidet auch eine ganze Reihe von Sicherheitsfragen.

Nochmals vielen Dank, Leute.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top