Frage

Ich habe ein Experiment Streaming bis 1 Mb / s von numerischen Daten, die für eine spätere Verarbeitung gespeichert werden muss. Es scheint so einfach wie in eine CSV-Datei direkt in eine Datenbank zu schreiben, und ich würde dann die Möglichkeit haben, leicht Subsets oder Bereiche abgerufen werden.

Ich habe Erfahrung von sqlite2 (wenn es Textfelder nur hatte) und es schien so ziemlich so schnell wie Raw-Disk-Zugang. Alle Meinungen über den besten aktuellen In-Process-DBMS für diese Anwendung?

Sorry - sollte hinzugefügt haben dies ist C ++ intially auf Fenster, aber Cross-Plattform ist schön. Idealer shoudl die DB Binärdateiformat Cross-Plattform sein.

War es hilfreich?

Lösung

Wenn Sie nur lesen müssen / schreiben, um die Daten, ohne Kontrolle oder Manipulation in der Datenbank durchgeführt, dann sollten beide es gut tun. Firebird-Datenbank-Datei kopiert werden kann, solange das System die gleiche Endianess (das heißt Sie die Datei nicht zwischen Systemen mit Intel und PPC-Prozessoren kopieren, aber Intel-Intel ist in Ordnung).

Wenn Sie jedoch immer mit den Daten etwas tun müssen, um, das über einfachen Lese- / Schreib ist, dann gehen Sie mit Firebird, da es ein vollständiger SQL-Server mit all ‚Unternehmen‘ ist Features wie Trigger, Views, Stored Procedures, temporäre Tabellen usw.

Übrigens, wenn Sie Firebird auszuprobieren entscheiden, empfehle ich Ihnen IBPP Bibliothek verwenden, darauf zuzugreifen. Es ist ein sehr dünnen C ++ Wrapper um Firebird-C-API. Ich muss etwa 10 Klassen, die alles kapseln und es ist tot-einfach zu bedienen.

Andere Tipps

Wenn alles, was Sie tun möchten, die Zahlen zu speichern und in der Lage sein, leicht Anfragen zu reichen, können Sie einfach und jede Standard Baumdatenstruktur, die Sie in STL zur Verfügung haben und serialisiert werden auf der Festplatte. Dies kann man in einer Cross-Plattform-Umgebung beißen, vor allem wenn man Quer Architektur zu gehen versuchen.

Was flexibleren / Menschen freundliche Lösungen, sqlite3 weit verbreitet ist, fest, stabil, sehr schön rundum.

BerkeleyDB hat eine Reihe von guten Eigenschaften, für die man es benutzen würde, aber keiner von ihnen in diesem Szenario gilt, imho.

würde ich sagen, mit sqlite3 gehen, wenn Sie die Lizenzvereinbarung akzeptieren können.

D

Abhängig welche Sprache Sie verwenden. Wenn es C / C ++, TCL, oder PHP, ist SQLite immer noch zu den besten in der Single-Writer-Szenario. Wenn Sie nicht über SQL-Zugriff benötigen, eine Berkeley DB-Stil Bibliothek könnte etwas schneller sein, wie Sleepycat oder gdbm. Mit mehreren Autoren könnten Sie eine separate Client / Server-Lösung betrachten, aber es klingt nicht wie Sie sie brauchen. Wenn Sie mit Java, hdqldb oder Derby (wird mit Sun JVM unter dem „JavaDB“ Branding) scheinen die Lösungen der Wahl zu sein.

Sie können auch ein numerisches Datendateiformat betrachten mögen, die speziell auf der Speicherung diese Art von großen Datenmengen ausgerichtet ist. Zum Beispiel:

  • HDF - die häufigste und auch in vielen Sprachen mit freien Bibliotheken unterstützt. Ich dies sehr empfehlen.
  • CDF -. Ein ähnliches Format, das von der NASA verwendet (aber nutzbar von jedem)
  • NetCDF - ein weiteres ähnliches Format (die neueste Version ist eigentlich ein abgespeckte HDF5) .

Dieser Link hat einige Informationen über die Unterschiede zwischen den oben genannten Datensatztypen: http://nssdc.gsfc.nasa.gov/cdf/html/FAQ.html

Ich vermute, dass weder Datenbank ermöglicht es Ihnen, Daten bei so hohen Geschwindigkeit zu schreiben. Sie können dies selbst überprüfen, um sicher zu sein. Nach meiner Erfahrung - mit einem einzigen integerem Primärschlüssel fehlgeschlagen SQLite mehr als 1000 Zeilen für eine sehr einfache Tabelle pro Sekunde einzufügen.

Bei einem Performance-Problem. - Ich würde verwenden CSV-Format, die Dateien zu schreiben, und später würde ich für die weitere Verarbeitung ihrer Daten in die Datenbank (SQLite oder Firebird) lade

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