» »

Real-time database

Real-time database

kunigunda ::

Rabil bi hitro free bazo (ne rabi biti sql), lohka je tudi opensource.
Ker jih je ogromno na trgu, men se pa mudi, bi rad slisal vase izkusnje, da ne probam vsake posebej.
Ta baza bo zgolj temporary, vendar mora biti zanesljiva (poweroff) in hitra, nekaj kilo transakcij/s+, max 1 mio records. Navadno pisanje v fajl zarad specifike ne rabim. real-time timesten je sicer to kar rabim, vendar je $$$.
Trenutno sem si zacahnal H2, extremedb, mongodb, objectdb, berkeleydb.

Kdo uporablja ze kaj takega da pove izkusnje ?

jype ::

Več moramo vedet. Mora biti vgrajena v tvoj program? Se bo nanjo povezovalo prek omrežja? Key-value store? Koliko časa traja, da jo napolniš, če/kadar jo izgubiš?

kunigunda ::

Lokalno samo. Record oriented. Zgubit je ne smem :) Ostalo je opcija.
Na kratko, realtime async transakcije ki prihajajo notri, morajo biti temp zapisane, ostalo se bo naprej procesiralo sinhrono in slo v
pravo bazo, rabim tolk, da ce je poweroff lohk pri restartu nazaj precitam temp zapise. Bi naredu navaden rdbms, sam ob procesiranju
recorda ga mora oznacit done, so pa variable-length, zato se ne bi svoje strukture loteval ker mam dost drucga dela (se bojo drugi igral z deploymentom med tem cajtom :P)

jype ::

Če delaš s to bazo iz Pythona priporočam Kyoto Cabinet: http://fallabs.com/kyotocabinet/

kunigunda ::

Je kr kompliciran multithread model, tko da c++ pa java.

poweroff ::

kunigunda je izjavil:

vendar mora biti zanesljiva (poweroff) in hitra,

Postgres?
sudo poweroff

kunigunda ::

Prepocasn :)

win64 ::

sqlite

kunigunda ::

Nobena baza ki se dotika diska direktno ne pride v postev. Razen ce bi mel ogromno raid diskovja z batterybackuped cachejem, pol se da priblizat
par jurjev transakcij/s.

jype ::

http://fallabs.com/kyotocabinet/

Pomoje še najbližje temu, kar potrebuješ.

kunigunda ::

Bom pogledu jype, thx

Daedalus ::

VoltDB. Samo single node ne bo šlo s tistim:) Če je ne smeš zgubiti, pol je replikacija itak obvezna.
Man is condemned to be free; because once thrown into the world,
he is responsible for everything he does.
[J.P.Sartre]

kunigunda ::

Jype, na prvi pogled je hitra (single thread), bom zdej se concurrency pa poweroff stestiru, ce bo ok, je to to :)

win64 ::

kunigunda ::

win64, ta je in-memory only, poweroff in vse zgubis.

Jype, teste je vse uspesno prestal, 50,000 recordov v 80ms. Zelo navdusen. Poweroff je tud do recorda natancno zapisal, tko da to je to.

jype ::

Sorry k sem najprej Python omenjal - samo iz Pythona sem uporabljal. Šele potem sem se dejansko spomnu, da je v resnici API za vse živo.

kunigunda ::

Si mel drgac kake tezave z njim kadarkoli ?

jype ::

Ne še, je pa res, da se zelo redko ugašajo mašine, kjer laufa (je pa I/O kar težak).

Nekje imam še vedno TokyoCabinet, ki je predhodnik, pa tudi deluje odlično.

WarpedGone ::

Tale problem se prevede v "kateri persistant storage omogoča IO reda 1000 ali več"?
Dokler gre samo za OUT operacije (branje) še lahko shajaš z HDD, kjer se podatki pač hranijo v ramu, takoj ko pa so v igri IN operacije pa si omejen z prepustnostjo nekaj 10 ukazov na sekundo al pa žrtvuješ 100% "ne smem zgubit" za 99,9..9% verjetnost, da ne zgubiš.

Če res hočeš/nucaš to kar praviš, ti preostane le RAID polje SSD diskov. Piše že en sam dost hitro da dosegaš svojih nekaj kilo IOPSov, z redundanco se pa zaščitiš proti odpovedi HW.

Poweroff je tud do recorda natancno zapisal, tko da to je to.

To niti približno ni to.
Kritičen je čas med zadnjim prispelim podatkom in PowerOff dogodkom. Če je minila desetinka sekunde, problema ne boš videl več niti na HDDju.
Ko boš mel pa realtime okolje, bo pa stvar ckrnila ravno takrat, ko par zadev še ne bo prišlo do diska.
Zbogom in hvala za vse ribe

kunigunda ::

Test ki sem ga naredil je vzporedno pisal recorde se clientu, in je 1:1, kar pomeni da imata oba enako stanje, kar rabim.
Commit v sql baze ponavadi (pri 7200rpm 200spin/s) naredi cca 200 transakcij na sekundo. Navaden fajl je dokaj hitra varianta, vendar rabim se update kljuca, za katerega nimam cajta programirat, zato sem rabil tocno to kar je jype predlagal.

jype ::

WarpedOne> si omejen z prepustnostjo nekaj 10 ukazov na sekundo al pa žrtvuješ 100% "ne smem zgubit" za 99,9..9% verjetnost, da ne zgubiš.

V resnici nikoli nimaš 100%, KyotoCabinet dela WAL in shadow paging, kar je dovolj dobro za tistih pet devetk na normalnem serverskem hardveru. Če potrebuješ še več konsistence reč postaviš na ZFS ali drug checksumming filesystem in je to to.

WarpedOne> Ko boš mel pa realtime okolje, bo pa stvar ckrnila ravno takrat, ko par zadev še ne bo prišlo do diska.

To drži vedno, ne glede na tehnologijo hranjenja.

kunigunda ::

jype, 1 record na 100,000 transakcij pri 0.1% moznosti izpada elektrike mi ni panike.

WarpedGone ::

Evo, se že spučajo zahteve.
Ko je treba plačat, so zahteve vedno nižje, kot dokler še ni bilo treba :)
Zbogom in hvala za vse ribe

Zgodovina sprememb…

kunigunda ::

Vedno je treba vzet price/performance in najvec iztrziti od tega :)

ZaphodBB ::

Čakaj, ti v bistvu rabiš message queue?

Btw. MongoDB ni robusten pri scenarijih smrti procesa ker transakcije poola v memoriji.

Zgodovina sprememb…

  • spremenil: ZaphodBB ()

kunigunda ::

Message queue ne rabim. Zadovoljivo resitev sem ze dobil.

jype ::

Za message queue se je nam za precej robustno rešitev izkazal rabbitmq.

kunigunda ::

Jaz sem ActiveMQ od apachija uporabljal, ni slab, ma pa par performancnih slabosti.

ZaphodBB ::

Performančno pravijo, da je ZeroMQ prava stvar.

Btw kunigunda ne da bi rinil vate, vendar če sem pravilno razumel tvoj usecase na vhodu dobivaš ogromen stream podatkov, katerega moraš obdržati pri življenju dokler ga ne sprocesiraš, potem ga pa lahko usmeriš v persistent storage?

Meni se zdi, da je to use case za message queue. Za KyotoTyrant si se pa odločil, ker rabiš "boljši" persistance?

Sprašujem pa zato, ker sam ravnokar implementiram MQ za obveščanje uporabnikov. Mail/SMS gre v queue, kjer počaka na svoj schedule, nakar ga dispatcher task odpošlje. Sicer sem tudi razmišljal o kaki NoSQL zadevi a sem se odločil, da probam z MQ.

Po drugi strani me pa zanima zakaj tebi ne ustreza MQ.

Zgodovina sprememb…

  • spremenil: ZaphodBB ()

kunigunda ::

Message queue je sinhron, to je prvo kar me zmoti. Drugo so performance (persistance bi lahko bil zadovoljiv).
Nekako 1500msg/s, vendar nocem, da sem na limiti. Povprecno mam vhoda 3000msg/s

Zgodovina sprememb…

kunigunda ::

Sem jih ogromno sprobal Zaphod, skupno imajo to (Apache, Swift, Mantaray, Openjms, Sonic..) da prvih par dni delajo ok, potem se pa ze porajajo
problemi s timeouti (ne glede na pucanje queue-ja). Nisem pa testiral placljivih ker imam low-budget.

ZeroMQ mi je neki znano, se pa ne spomnim vec a je bil tud v igri takrat, sam zdej itak mam kar sem rabil :)

Zgodovina sprememb…

ZaphodBB ::

Ej super, upam da te ne moti, da te baram ampak očitno imaš nekaj izkušenj na to temo, pa bi rad izkoristil priliko :D.

Praviš da so MQ sinhroni, tole me je malo zmedlo ker po definiciji je večina queueov async - to misliš za response? To se rešuje tako, da za odgovore uporabiš drug, povratni queue.

Sam sem se do sedaj še nisem nikoli uporabil MQjev, to je prvič a sem vedno živel pod vtisom, da kadar rabiš nekaj async z nizkimi latencami, po možnosti v distribuiranem heterogenem okolju, je MQ pravi pristop.

Ta moja vprašanja so splošne narave in se ne navezujejo na tvoj use case, čeprav me zanimajo tvoje izkušnje.

kunigunda ::

Oj, ja naceloma se po dva queuja uporabljata, dohodni in odhodni, ceprav lahko tudi preko enega delas (bodisi s flagi, ali celo preko topicov) Sam MQ je asinhron, sam proces ki ga jaz rabim pa ne, pri meni letijo notri requesti nakljucno, nobeden ne sme biti blocked, lahko se pa prvi se procesira, medtem ko sedmega celega pohendlam. Poleg tega mi ni ratalo resiti MQ z dual-node syncom. Detajlov sicer ne morem pisati, a je stvar se mnogo bolj kompleksna v samem procesu. ActiveMQ mi je pri single proces testih z nizko latenco odgovarjal, tja do 1000msg/s max. Je pa nekje po 30urah ze opazno upadla brzina zapisovanja v queue (test je bil tak da jih je nekje 500 vedno bilo v queueju istocasno).
SW ki ga delam je zlo obcutljiv in specificen, tko da moram vse vzeti v ozir (na trgu ni zastonj po 500k+ eur :P)

kunigunda ::

Aja, pozabu sm se povedat, da bo tud jypov solution temporary, ker bom ob koncu sam zimplementiral svoj tempdb, ne morm si privosct 3rd party solate zraven :) MQ je pa delno sinhron navzven tudi zato ker deluje na nacin pull, sam namrec ne pusha paketov. Poleg tega mi income requesti ne prihajajo po tcp-ju, plus da so proprietary protokoli (zarad mene jih ne bojo spreminjali :P)

ZaphodBB ::

To maš trading platformo?

kunigunda ::

Ne


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Nasveti glede API-ja

Oddelek: Programiranje
111176 (716) Arey
»

Worker arhitektura

Oddelek: Programiranje
102122 (1734) pegasus
»

C/C++ Kako obvestim ostale threde, da je prispel nov podatek?

Oddelek: Programiranje
61409 (1273) ERGY
»

Komunikacija med thread-i

Oddelek: Programiranje
133725 (3531) zlatko
»

Message Queue

Oddelek: Programiranje
121097 (887) Vesoljc

Več podobnih tem