Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data

Re:Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data
« Odpověď #15 kdy: 02. 05. 2024, 18:26:55 »
To, že podporují různé storage enginy, je za mne plus – používají praxí prověřené enginy, u kterých už se dá věřit tomu, že nebudou ztrácet data.

Jasně ale ten storage engine klidně a ochotně uloží data, která zmršila ta vrstva nad tím. Opět příklad z MySQL. VARCHAR(5), uložím tam "Dobrý den pane Jirsáku." a v DB mám bez jediné chybičky "Dobrý". Takže storage engine nezklamal, ale přes to s tím výsledkem nejsem spokojený.


kate

Re:Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data
« Odpověď #16 kdy: 02. 05. 2024, 18:36:32 »
Jsem si říkal, že se dozvím, jak používá SurrealDB někdo jiný, a skončil jsem zase u sebe 8)

Používám, ale momentálně jen na vyzkoušení na drobný projekt kde by mi nevadila ztráta dat. Takže o zkušenosti se zatím moc dělit nemohu.

Re:Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data
« Odpověď #17 kdy: 02. 05. 2024, 21:17:13 »
Jasně ale ten storage engine klidně a ochotně uloží data, která zmršila ta vrstva nad tím. Opět příklad z MySQL. VARCHAR(5), uložím tam "Dobrý den pane Jirsáku." a v DB mám bez jediné chybičky "Dobrý". Takže storage engine nezklamal, ale přes to s tím výsledkem nejsem spokojený.
Jenže tohle je tak navržené záměrně. Myslet si o tom můžu co chci, ale je to záměr, a i když to nevím, zjistím to poměrně snadno.

Takových věcí se nebojím. (Ale taky nepoužívám MySQL…) Bojím se těch případů, kdy čas od času i od lidí, kteří vědí, jak to provozovat, přijdou informace, že za nějakých nejasných okolností přišli o část dat. A všichni tuší, že tam je nějaký okrajový případ, který je špatně vyřešen, ale nikdo to nedokáže nasimulovat a opravit to. A věřím, že třeba RocksDB už takovéhle chyby nemá, protože už je dostatečně prověřená.

Navíc ani ten koncept vzít key-value databázi a nad ní postavit databázi s komplexnějším modelem není nový. A mám pocit, že se osvědčil. Takže za mne SurrealDB bere existující osvědčené věci a „jenom“ je spojuje tím správným způsobem.

Používám, ale momentálně jen na vyzkoušení na drobný projekt kde by mi nevadila ztráta dat. Takže o zkušenosti se zatím moc dělit nemohu.
Špatná zkušenost obvykle stačí jedna :-)

Já přeci jen jednu zkušenost přidám – dokumentace je zatím taková dost rozpracovaná (ale pořád se to zlepšuje). Občas je nějaká funkcionalita popsaná (i se syntaxí) třeba v changelogu nebo ve features, ale v referenční příručce to ještě popsané není. Takže pak člověk pátrá, kde teda viděl tu syntaxi napsanou. A taky se mi stalo (ale to bylo ještě před verzí 1.0.0), že něco bylo krásně popsané v dokumentaci – akorát to ještě nebylo implementované, o čemž v té dokumentaci jaksi chyběla zmínka.

Re:Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data
« Odpověď #18 kdy: 03. 05. 2024, 10:19:16 »
Já takto provozuju PostgreSQL. Ale pozor, já to mám vždy na vlastním HW. I díky této diskusi, kdy Tomáš psal, že i pg je multiengine - ne není, má jen api v nějakém stavu (asi stále devel), kdy je možné si napsat vlastní storage engine. Co jsem našel, tak naposledy to někdo zkoušel v roce 2019 a před tím EDB (komerční postgres) v roce 2013. A nejvíce diskusí jsem našel u lidí, kteří to chtějí provozovat na cloudu a jde jim doslova o každý 1kB (někdo psal kompresní storage + delta změny místo MVCC). Já mám postgresql na vlastním hw a jestli ta DB má 4TB nebo 10TB je mi celkem jedno.

Ale takhle přesně je třeba udělaný timescaledb jako extension do pg, api pro extension je už dnes stabilní a to využívá řada firem k jeho rozšiřování. Sám pg v sobě více storage enginů nemá, ale má otevřené dveře, aby to mohli udělat ostatní.

Nj. dnes je moderní dávat vše do kubernetu vč. databází, trpí u toho všichni kromě zadavatelů.

Re:Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data
« Odpověď #19 kdy: 03. 05. 2024, 11:31:34 »
Ale takhle přesně je třeba udělaný timescaledb jako extension do pg, api pro extension je už dnes stabilní a to využívá řada firem k jeho rozšiřování. Sám pg v sobě více storage enginů nemá, ale má otevřené dveře, aby to mohli udělat ostatní.
TimescaleDB je podle mne rozšíření, které ale interně ukládá data do standardního storage enginu PostgreSQL.


Re:Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data
« Odpověď #20 kdy: 04. 05. 2024, 08:44:33 »
cassandra

Re:Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data
« Odpověď #21 kdy: 04. 05. 2024, 11:15:56 »
A co QuestDB? https://questdb.io/

Je to time-series, je to pod apache licencí (takže žádné výpalné, kdybys chtěl vlastní cloud) a používají to už tisíce firem...

SurrealDB je cool, protože tam je rust, ale to je tak asi všechno...

Re:Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data
« Odpověď #22 kdy: 04. 05. 2024, 12:26:19 »
A co QuestDB? https://questdb.io/

Je to time-series, je to pod apache licencí (takže žádné výpalné, kdybys chtěl vlastní cloud) a používají to už tisíce firem...

SurrealDB je cool, protože tam je rust, ale to je tak asi všechno...

Jako je to od vás a předchozí jedno-slovné cassandry pěkné a děkuji, ale úplně jste nepochopili smysl mé otázky. Resp. vaše odpověď by mohla být označena jako "accepted" na otázku "Jaké existují time-series databáze?". Opravdu není problém napsat do googlu "time-series databáze" a hodit sem první 2 odpovědi. Není to ale moc užitečné.

Doufal jsem, že to bude více či méně jasné už z mého prvního, případně dalších příspěvků, ale asi ne. Takže: v tomto postu se neptám na to, jestli existují time-series databáze. Neptám se ani na příklady takových databází. Ptám se na zkušenosti se SurrealDB. Ptám se na míru vhodnosti jejího použítí s přihlédnutím k tomu že většina (rozuměj ne všechna!) dat je time-series povahy.

Zmínil jsem a opakuji, že se nejedná ani o velký, ani o kritický projekt. Naopak, jedná se o projekt, který nabízí příležitost zkusit něco nového, trochu experimentovat a tudíž příliš nevadí, pokud se u toho trochu spálím.

Jedná se o malý projekt co to objemu dat i co do velikosti týmu. Není tedy potřeba optimální databáze (optimální datová struktura). Důležitější je snadnost použítí a vývoje. S tím souvisí to, že jenom a pouze specializovaná time-series databáze neobslouží další potřeby na jiné formy dat. Už jsem zmínil věci typu user settings, vypočtené charakteristiky, atd. Obecně řečeno, přestože většina vstupních dat je time-series ze senzorů atp., tak jsou tam další strukturovaná i nestrukturovaná data. Použití TS DB by tedy vyžadovalo použití ještě minimálně jedné další DB, což jde proti tomu, že to je malý projekt pro malý tým, kde prioritu má jednoduchost. Proto se nabízí použití multi-model databáze a proto se ptám na zkušenosti s asi nejnovějším přírustkem v této oblasti - SurrealDB.

Pokud k tomu umíte říct jen "existuje QuestDB" a "jediná pozitivní věc na SurrealDB je Rust", tak mockrát děkuji!

Re:Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data
« Odpověď #23 kdy: 04. 05. 2024, 12:37:32 »
Jasně ale ten storage engine klidně a ochotně uloží data, která zmršila ta vrstva nad tím. Opět příklad z MySQL. VARCHAR(5), uložím tam "Dobrý den pane Jirsáku." a v DB mám bez jediné chybičky "Dobrý". Takže storage engine nezklamal, ale přes to s tím výsledkem nejsem spokojený.
Jenže tohle je tak navržené záměrně. Myslet si o tom můžu co chci, ale je to záměr, a i když to nevím, zjistím to poměrně snadno.

Takových věcí se nebojím. (Ale taky nepoužívám MySQL…) Bojím se těch případů, kdy čas od času i od lidí, kteří vědí, jak to provozovat, přijdou informace, že za nějakých nejasných okolností přišli o část dat. A všichni tuší, že tam je nějaký okrajový případ, který je špatně vyřešen, ale nikdo to nedokáže nasimulovat a opravit to. A věřím, že třeba RocksDB už takovéhle chyby nemá, protože už je dostatečně prověřená.

Navíc ani ten koncept vzít key-value databázi a nad ní postavit databázi s komplexnějším modelem není nový. A mám pocit, že se osvědčil. Takže za mne SurrealDB bere existující osvědčené věci a „jenom“ je spojuje tím správným způsobem.

Používám, ale momentálně jen na vyzkoušení na drobný projekt kde by mi nevadila ztráta dat. Takže o zkušenosti se zatím moc dělit nemohu.
Špatná zkušenost obvykle stačí jedna :-)

Já přeci jen jednu zkušenost přidám – dokumentace je zatím taková dost rozpracovaná (ale pořád se to zlepšuje). Občas je nějaká funkcionalita popsaná (i se syntaxí) třeba v changelogu nebo ve features, ale v referenční příručce to ještě popsané není. Takže pak člověk pátrá, kde teda viděl tu syntaxi napsanou. A taky se mi stalo (ale to bylo ještě před verzí 1.0.0), že něco bylo krásně popsané v dokumentaci – akorát to ještě nebylo implementované, o čemž v té dokumentaci jaksi chyběla zmínka.


Díky moc za vaše komentáře. Ad poslední odstavec: jde to asi trochu proti tomu, že říkám, že jsem ochoten experimentovat, ale přestože mě SurrealDB přijde zajímavá a souhlasím i s tím, že postavit multi-model nad key-value je v pořádku, ostatně nad čím jiným stavět multi-model.. tak mě nějvíc odrazuje (ne)vyzrálost projektu. A pokud jak říkáte, je potřeba honit informace po change-logu, release notes a dokumentaci, není to ideální.
A že to bylo ještě před verzí 1.0.0 mi v případě Surreal nepřijde relevantní, protože sami autoři říkají, že 1.0.0 u nich neoznačuje production-ready. Je v tom naopak ta snaha honit hype a vzbudit zdání, že je projekt mature. Sami naopak upozorňují (i když především na redditu, aby tím neposkvrnili svůj dojem na stránkách), že projekt ještě není prod-ready. Nevím pak, kde a jak mám hledat jistotu (věřit autorům), že (ta či jiná funkce) už prod-ready je.

Pořád to zvažuju, protože by mi přišlo škoda za rok zjistit, že už celý projekt vyzrál a je ok to použít, přičemž by můj projekt bylo potřeba migrovat (a to odůvodnitelné téměř určitě nebude). Jinak řečeno, jestli třeba ten rok nezkusit přežít porodní bolesti a začít z toho později sklízet ovoce.

Jako alternativu se dívám po ArangoDB (v tuto chvíli už je snad jasné, že se vzhledem ke specifikaci projektu dívám po multi-model db). Máte nějaké zkušenosti s touto db? Projekt je mnohem vyzrálejší, dokumentace všude haldy a popisu se většina funkcí překrývá..

Re:Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data
« Odpověď #24 kdy: 04. 05. 2024, 12:41:23 »
Nj. dnes je moderní dávat vše do kubernetu vč. databází, trpí u toho všichni kromě zadavatelů.

Nejedná se o případ mého projektu, který naopak pojede na max pár lokálech v air-gapped prostředí. Ale přesto se chci zeptat, jak lépe byste řešil horizontální škálování u velkých projektů, kde navíc (ne vždy, ale přece) kubernetes pro servicy smysl dává - tzn. pokud má firma servicy v kubernetu, jak lépe byste z hlediska ops nákladů řešil databáze?

Re:Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data
« Odpověď #25 kdy: 04. 05. 2024, 15:43:18 »
A pokud jak říkáte, je potřeba honit informace po change-logu, release notes a dokumentaci, není to ideální.
A že to bylo ještě před verzí 1.0.0 mi v případě Surreal nepřijde relevantní, protože sami autoři říkají, že 1.0.0 u nich neoznačuje production-ready.
Jenom upřesním, z vaší reakce mi došlo, že jsem to nenapsal úplně přesně – changelogem jsem myslel oficiální popis nových vlastností na webu, neprocházel jsem changelog v podobě jednotlivých commitů. A co se týče té verze 1.0.0 – ano, vím o tom, tu verzi jsem zmiňoval kvůli spolehlivosti dokumentace. Od verze by měla být dokumentace na webu spolehlivá v tom smyslu, že vše, co je v ní popsáno, je i implementováno. Ale stále mohou nastávat opačné případy, že něco už je implementováno, ale v dokumentaci to ještě popsáno není. Ale to nevnímám jako chybu, to je dnes u projektů s krátkým release cyklem celkem normální.

Je v tom naopak ta snaha honit hype a vzbudit zdání, že je projekt mature. Sami naopak upozorňují (i když především na redditu, aby tím neposkvrnili svůj dojem na stránkách), že projekt ještě není prod-ready. Nevím pak, kde a jak mám hledat jistotu (věřit autorům), že (ta či jiná funkce) už prod-ready je.
Ono je to těžké, co prod-ready vlastně znamená. Použil bych SurrealDB pro nějaký soukromý projekt, který ale bude používat víc lidí a selhání by pro ně bylo nepříjemné? Ano, použil – ale zálohování budu řešit tak, abych byl v případě potřeby schopen zrekonstruovat data nezávisle na SurrealDB. Použil bych SurrealDB na core bankovního systému? Ne, nepoužil, a nepoužil bych ji pro to ještě několik let, protože u takové věci požaduji i určité prověření časem. Jenže do takového místa bych nepoužil třeba ani MySQL – i kdybych odhlédl od výkonnosti nebo funkcionality. Ale nepovažoval bych ji za dostatečně spolehlivou. Ale neřekl bych, že MySQL není prod-ready.

Jedná se o malý projekt co to objemu dat i co do velikosti týmu.
Ta zmínka o týmu je za mne klíčová. Já bych do toho s týmem zatím nešel. Zkouším si to na soukromých věcech, případně to použiju u nějaké pomůcky, na které sice mohou dělat další dva tři lidé, ale tu databázovou část řeším sám. Takže je to čistě na mně, jak si poradím s dokumentací, se zprovozněním něčeho atd. Zkrátka bych do toho netahal jiné lidi, kteří nejsou na stejné vlně jako já a nepřistupují k tomu tak, že si chtějí vyzkoušet něco nového – a jsou si vědomi toho, že to občas bude průzkum neprobádaných cestiček a někdy i ústup zpět.

Jako alternativu se dívám po ArangoDB (v tuto chvíli už je snad jasné, že se vzhledem ke specifikaci projektu dívám po multi-model db). Máte nějaké zkušenosti s touto db? Projekt je mnohem vyzrálejší, dokumentace všude haldy a popisu se většina funkcí překrývá..
Zkušenost s ArrangoDB nemám. Také jsem ji zvažoval, nějaký příklad z webových stránek jsem si také vyzkoušel, zvažoval jsem ji – ale mezi tím přišla SurrealDB. ArrangoDB vnímám více jako grafovou databázi – má podporu pro procházení grafů do hloubky (takové to kamarád má kamaráda, který má kamaráda, jehož kamarád…). SurrealDB má Record link, kterým se dají vyjádřit vazby mezi záznamy, ale nemá tam to procházení do hloubky. Já to nepotřebuju a samozřejmě se to dá emulovat v aplikaci, ale za mne SurrealDB není pravá grafová databáze, ArrangoDB je.

Re:Zkušenosti se SurrealDB s přihlédnutím k oblasti time-series data
« Odpověď #26 kdy: 07. 05. 2024, 11:13:57 »
Nj. dnes je moderní dávat vše do kubernetu vč. databází, trpí u toho všichni kromě zadavatelů.

Nejedná se o případ mého projektu, který naopak pojede na max pár lokálech v air-gapped prostředí. Ale přesto se chci zeptat, jak lépe byste řešil horizontální škálování u velkých projektů, kde navíc (ne vždy, ale přece) kubernetes pro servicy smysl dává - tzn. pokud má firma servicy v kubernetu, jak lépe byste z hlediska ops nákladů řešil databáze?

Málokterá databáze umí horizontálně škálovat. Zpravidla to znamená poměrně dost procesů okolo a v nich může být také chyba, to snižuje celkovou spolehlivost. V podstatně skoro nic neumí horizontálně škálovat samotné dotazy, je to trik za trikem a musíš k tomu uzpůsobit aplikaci.

On se blbě horizontálně škáluje už i blbý file storage, natož něco, co má indexy a vnitřní vztahy, zámky a oprávnění.

Pro horizontální škálování databází je hodně těžká ta část, kdy přidáváš nový node, potřebuješ odněkud pro něj získat, data, když se jedná o netriviální velikost dat trvá to prostě strašně dlouho a zatížíš s tím současnou databázi. Máloco má tohle řešeno úhledně a přesně.

S počtem databázových nodů často roste složitost vzájemných vztahů (a tím se může snížit stabilita nebo snížit observabilita), stejně tak i moderní databáze mají řadu procesů, kde počet nodů generuje O(N) nebo i O(N^2) složitost některých operací.

Kubernetes, VM a jakýkoliv podobný overlay schovává strašně důležitou věc, fsync, databáze pak neví, kdy data jsou persistována a kdy nejsou. Řeší se to strašnými kotrmelci a nutností složitě data znovu číst a ověřovat, málokdo dělá a není nic horšího než při pádu celého k8s clusteru příjdeš i o data. Raw block volumes jsou pořád v ranné fázi, ale už je možné je nějak používat, to může být řešení, pak ale budeš pinnovat disky k instanci, no, ztratíš část výhod.

Moje doporučení je prostě databázi neškálovat horizontálně, udělat jí vysokodostupnou v několika instancích, snažit se v počátku škálovat vertikálně a optimalizovat. Přidávat instance pouze v poloautomatickém režimu. Cloud databáze, které tohle papírově umí mají za sebou dost vysoké náklady na vývoj a speciální infrastrukturu, snad nikdo z velkých hráčů ty technologie nemá open source (snowflake, bigquery, Cosmos) a přitom mají také dost velké problémy se škálováním a ne vždy to funguje dobře.

Pokud už člověk nemá vyhnutí, tak v kontejnerech se mi osvědčily věci jako tidb/tikv, scylladb, cockroachdb atd. Jen to "osvědčili" znamená, že dobře funguje jejich práce v kubernetu, ne že sami nemají zase svoje chyby. Stejně tak dobře fungují in-memory databáze, logicky. Pak to ale naráží na to, že síť v kubernetu je prostě obvykle pomalá a sotva se na projektech dostáváme na 10GbE stabilní intra node komunikaci, to na HW už máme přes 100GbE běžně.

Největší problém je asi to, že drtivá většina lidí považuje fungující databázi takovou, pro kterou najdou do kubernetu operátor a která jim běží a funguje. Už ale málokdo řeší a zohledňuje hraniční případy, jak bude fungovat obnova, jak se to zachová při blackoutu clusteru, jak to bude řešit partitioning, jak se bude řešit oprava dat  atd. Některým to funguje roky bez problémů a pak tvrdí, jak to je stabilní. Stabilitu ale musím prokázat a ne že se mi náhodou stane.

Z praxe mohu říct, že čím větší projekt, tím více roli hraje shardování, cachování, asynchronní replikace a verzování stavu aplikace. Prostě se dělají spousty malých databází a řeší se, jestli stav je konečný, průběžný nebo zastaralý. Tj. zase tam je nějaká logika okolo.