Diskuze: Verziovanie dat
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 9 zpráv z 9.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Taky tohle budu řešit a přemýšlel jsem nad tím.
Napadla mě ještě jedna možnost:
v tabulce bude sloupec např. 'original', ve kterém bude ID toho úplně
půdovního záznamu.
a pak to budeš tahat takto:
SELECT * FROM article WHERE article.original = 1755 ORDER BY article.id DESC LIMIT 1;
vytáhneš jeden záznam, který má jako absolutního 'rodiče' (sloupec original ) záznam s ID např. 1755, seřazeno podle ID sestupně - poslední verze.
Jinak z uvedených možností bych asi zvolil spíše 2. možnost. Příjde
mi jednodušší nastavit defaultní hodnotu sloupci na CURRENT_TIMESTAMP , než
vytahovat nějaký počet atd. je to takhle vlastně automatizováno 
Ale kdyžtak počkej až se vyjadří někdo další ... 
Vdaka za tip. Rozmyslam nad tym ze tych zaznamov tam pojde strasne vela a obcas aj velmi casto. To znamena ze v niektorych sekundach sa tam moze dostat aj viacero zmien jedneho zaznamu. V takom pripade by som mal viac zaznamov s rovnakym timestampom v stlpci timestamp a uz by som neveel urcit ktory je posledny. Preto si myslim ze prva moznost je asi lepsia.
Tvoje riesenie je tiez super a hodi sa do nejakeho jednoducheho CMS alebo tak. Tvoje riesenie nema vedomost o tom ktory zaznam je posledny. Predpokladas ze posledny je ten s poslednym id ale to nemusi byt pravda ak mas viac read a write nodes, mozes precitat staru informaciu ktora este nie je propagovana v DB pooli.
Napr ak by si riesil system prevodov v banke, tak by si chcel aktualizovat poslednu verziu stavu uctu a nie jej posledny zaznam v DB.
Este pockam ci sa vyjadri niekto iny. Ak nie, tak ta oznacim ako najlepsie riesenie.
Je vůbec nutné nějaké data tahle verzovat? Takový návrh se mi moc nezdá.. Třeba pokud vezmu v potaz ten bankovní účet, tak přece není třeba jeho stav takhle "verzovat", ale pouze zpětně dopočítávat jeho stav podle provedených transakcí. Takhle bys měl v databázi vpodstatě redudantní data, což je většinou špatně.
No dajme tomu ze zakaznik si vyziada bankovy vypis za posledny mesiac. Na nom nebude len posledny/aktualny zaznam(zostatok) ale vsetky zaznamy.
Transakcie verzovane nemam takze nemam ako spetne prepocitat co sa vtedy stalo. Problem je ze parametre transakcii sa casom tiez menia, napr cena za chleba je 15 korun dnes ale vcera bola len 12. Takze spetne si to neviem vypocitat.
Ktore data povazujes za redundantne?
No v případě, že bych si ukládal transakce (včetně hodnoty transakce v té době, tzn. v tvojem příkladu 12 korun místo současných 15ti), tak platí, že zůstatek k určitému datu můžeš získat tak, že vezmeš současný zůstatek a přičteš k němu všechny proběhlé transakce. Tohle je hodnota, kterou jednoduše spočítáš a nemusíš ji ukládat zvlášť.
Navíc si nemyslím, že by časová náročnost takového výpočtu byla nějak podstatně vyšší než obyčejného selectu a pokud nemáš aplikaci s desetitisícema dotazama za sekundu, tak je zbytečné to takhle optimalizovat.
Transakcie su dost zlozite, su tam rozne akcie, zlavy a nedaju sa spatne vypocitat aj kvoli malemu nahodnemu cislu. Uzivatelov je strasne vela a transakcii je este ovela viacej a vypocitavat pre kazdeho uzivatela stav uctu k zaciatku vekov by istotne bolo narocne. Pravdepodobne by bolo vhodne verziovat aj transakcie.
Netrap sa s rozhodnutim co je zbytocne optimalizovat ani aka je casova narocnost vypoctu - to rozhodnem ja. Pytal som sa na najlepsi model na verzovanie dat v big data systemoch.
Nemusíš nic zpětně vypočítávat u transakcí, tam si jen uložíš její hodnotu. Pokud fakt vyloženě trváš na tom si ukládat minulé stavy účtu, tak bych to udělal jednoduše pomocí druhé tabulky a triggeru. V hlavní tabulce máš současný stav. Při jakékoliv změně se spustí trigger, který ti vezme starou hodnotu a uloží do vedlejší tabulky, kde si to budeš ukládat podle timestampu (PK by měl stačit id účtu + timestamp s přesností na milisekundy).
Ale stejně si myslím, že tohle není úplně správná cesta (ikdyž nevidím celou strukturu databáze), uživatel se síce dozví, jaké měl změny na účtu, ale nedozví se, kolik přesně za konkrétní transakci zaplatil/získal, když nastanou dvě a více transakcí najednou (pokud sem to dobře pochopil, tak transakce ukládáš, ale neukládáš hodnotu, takže když je pouze jedna, dá se to ze změny stavu jednoduše vyčíst, ale pokud je jich více, tak už ne).
Ano, toto je navrh s ktorym momentalne pracujem.
Mam kolekciu v ktorej su aktualne stavy a mam druhu kolekciu, v ktorej je
historia danych dokumentov. Druha kolekcia odkazuje na hlavnu kolekciu cez
primary id a cez verziu. Vdaka tomuto rozdeleniu ma kolekcia s aktualnymi
dokumentami o miliony zaznamov menej a hladanie je rychlejsie.
Mam tam aj timestamp ale ten nepouzivam pre pripad ze by niekto manipuloval datami. Verzie su lepsie, lebo vies presne povedat ci chyba nejaky dokument z kolekcia alebo je tam nejaky dokument ulozeny dvakrat.
V pripade ze by som potreboval transakcie, tak z rozdielov stavov medzi jednotlivymi dokumentami si viem vypocitat deltu zmeny.
Toto je zatial to najlepsie, na co som prisiel aj ja. Len ma zaujimalo ci vie niekto este lepsie riesenie verzovania.
Zobrazeno 9 zpráv z 9.
