Vra

Ek het 'n eksperiment streaming up 1Mb / s van numeriese data wat gestoor moet word vir latere verwerking. Dit lyk so maklik om direk te skryf in 'n databasis as 'n CSV-lêer en ek sou dan het die vermoë om maklik deelversamelings of reekse te haal.

Ek het ondervinding van sqlite2 (wanneer dit het net teks velde) en dit was pretty much so vinnig as wat rou toegang skyf. Enige menings oor die beste stroom in-proses DBBS vir hierdie aansoek?

Jammer - moes bygevoeg dit is C ++ aanvanklik op vensters, maar kruis platform is lekker. Die ideaal is die DB binêre lêer formaat shoudl kruis platform wees.

Was dit nuttig?

Oplossing

As jy net nodig het om te lees / skryf die data, sonder enige kontrolering of manipulasie gedoen in die databasis, dan moet die twee moet dit fyn te doen. Firebird se databasis lêer gekopieer kan word, so lank as wat die stelsel het dieselfde endianess (maw jy kan nie die lêer tussen stelsels te kopieer met Intel en PPC verwerkers, maar Intel-Intel is fyn).

As jy egter nodig het om ooit iets met data wat anderkant eenvoudige lees / skryf doen, gaan dan met Firebird, want dit is 'n volle SQL bediener met al die "onderneming" funksies soos snellers, sienings, stored procedures, tydelike tafels, ens.

BTW, as jy besluit om Firebird te probeer, ek raai jy IBPP biblioteek gebruik om dit te bekom. Dit is 'n baie dun C ++ wrapper rondom C API Firebird se. Ek het sowat 10 klasse wat alles omsluit en dit is dood-maklik om te gebruik.

Ander wenke

As alles wat jy wil doen, is die stoor van die getalle en in staat wees om maklik te navrae wissel, jy kan net neem 'n standaard boom datastruktuur jy beskikbaar in STL het en afleveringen dit op jou hardeskyf. Dit kan jy byt in 'n kruis-platform-omgewing, veral as jy probeer om kruis-argitektuur gaan.

Sover meer buigsaam / mense-vriendelike oplossings, sqlite3 word algemeen gebruik, soliede, stabiele, baie mooi rondom.

BerkeleyDB het 'n aantal goeie eienskappe waarvoor 'n mens sou dit gebruik, maar nie een van hulle toe te pas in hierdie scenario, imho.

Ek sou sê gaan met sqlite3 as jy die lisensie-ooreenkoms kan aanvaar.

-D

Dit hang af watter taal jy gebruik. As dit is C / C ++, TCL, of PHP, SQLite is steeds een van die beste in die enkel-skrywer scenario. As jy nie SQL toegang nodig, kan 'n Berkeley DB-styl biblioteek effens vinniger, soos Sleepycat of gdbm wees. Met verskeie skrywers wat jy kan oorweeg om 'n aparte kliënt / bediener oplossing, maar dit klink nie soos jy dit nodig het. As jy Java, hdqldb of derby (met Sun se JVM verskeep onder die "JavaDB" brandmerk) lyk na die oplossings van keuse te wees.

Jy kan ook 'n numeriese data lêer formaat wat spesifiek na die stoor van hierdie tipe van groot datastelle is gerig oorweeg. Byvoorbeeld:

  • HDF - die mees algemene en goed ondersteun in baie tale met gratis biblioteke. Ek hierdie raai.
  • CDF -. 'N soortgelyke formaat wat gebruik word deur NASA (maar bruikbare deur iemand)
  • vetCDF - nog 'n soortgelyke formaat (die mees onlangse weergawe is eintlik 'n gestroopte-down HDF5) .

Hierdie skakel het 'n paar inligting oor die verskille tussen die bogenoemde datastel tipes: http://nssdc.gsfc.nasa.gov/cdf/html/FAQ.html

Ek vermoed dat nie databasis sal jou toelaat om data te skryf op so 'n hoë spoed. Jy kan dit self te gaan om seker te wees. In my ervaring - misluk SQLite om meer as 1000 rye per sekonde INSERT vir 'n baie eenvoudige tafel met 'n enkele getal primêre sleutel.

In die geval van 'n prestasie probleem -. Ek sou CSV formaat te gebruik om die lêers te skryf, en later sou ek hulle data na die databasis (SQLite of Firebird) vir verdere verwerking te laai

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top