<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p>Ahoj,</p>
<p>díky za reakci i odkaz na článek. Kupodivu mi nějak unikl,
vycházel jsem z informací o Eventual Consistency:
<a class="moz-txt-link-freetext" href="http://docs.couchdb.org/en/stable/intro/consistency.html">http://docs.couchdb.org/en/stable/intro/consistency.html</a></p>
<p>Přesně jak píšeš, výpadky jsou minimální, takže by se dala použít
on-line databáze a v případě výpadku nějaká dočasná lokální kopie.
I s touhle myšlenkou jsem si pohrával, ale narazil jsem právě na
problém, jak správně data mezi on-line databází a lokální kopií
synchronizovat. V globále v podstatě řeším následující:</p>
<p>1) Mám "sdílené" tabulky, které potřebuji mít v nějaké rozumně
aktuální podobě k dispozici v lokálních databázích (např.
produkty, uživatelé, zákazníci). Do těchto tabulek se nemusí nutně
zapisovat v případě výpadku, tzn. je li výpadek, nepůjde upravit
produkt, přidat zákazník a tak dále. Lokální kopie tedy může být
"read-only".<br>
</p>
<p>2) Mám tabulku účtenek, do které pokladna bude zapisovat i v
případě výpadku. Z hlediska použitelnosti by bylo nejideálnější,
kdyby na lokále byla aktuální data (tzn. i v případě výpadku je
přístup ke všem účtenkám, např. kvůli reklamaci). Do této tabulky
nebudou zapisovat jiné pokladny (pokud nebude sdílená pro všechny
účtenky, každopádně by ale pokladna neměla upravovat řádky jiné
pokladny). Na serveru mi zase stačí "read-only" kopie, abych se
mohl z administrace dostat ke všem účtenkám všech prodejen,
případně, aby se mohla třeba řešit reklamace na jiné prodejně, než
byl produkt zakoupen.</p>
<p>Dá se tedy říct, že potřebuji synchronizovat data - některá ze
serveru na pokladnu a jiná z pokladny na server. Přičemž právě
synchronizace dat se nejvíce bojím - přijde mi to jako obsáhlý
problém a myslím že to se svými znalostmi nejsem schopen podchytit
v aplikaci. A právě CouchDB mi přišlo jako ideální řešení, protože
mi zaručí dostupnost dat jak na lokálech, tak na serveru. Jenže ke
CouchDB nemůžu najít moc zdrojů a nejsem si jist, jak mám některé
věci implementovat - jak jsem psal, třeba právě sklad a skladové
zásoby. Je dobré si udělat dokument "sklad" a v něm udržovat
seznam všech produktů s jejich počtem. Nebo si v podstatě
naroubovat relační přístup a vytvořit pro každý produkt dokument s
obsahem "produkt", "sklad", "počet ks". Nebo udržovat skladové
zásoby uvnitř dokumentu "produkt"?</p>
<p>Neotravoval bych Vás tím, jenže obvykle to u mě probíhá tak, že
se s vervou pustím do implementace a když jsem tak v půlce, tak mi
začnou docházet komplikace daného postupu. Tak všechno zahodím a
pustím se do jiného způsobu, kde obvykle opět dojdu k jiným
komplikacím. No a když už je to po páté a po týdnu není nic
hotového, tak bych to s chutí roztřískal :-D<br>
</p>
<p>Zdraví</p>
<p>Honza<br>
</p>
<br>
<div class="moz-cite-prefix">Dne 26.9.2018 v 10:41 Lukáš Němec
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:C6A0D2E6-34FF-416C-A045-2BE38ED8B661@gmail.com">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Ahoj,
<div class=""><br class="">
</div>
<div class="">dle popisu CouchDB a tvého problému, se zdá, že to
řeší přesně to co potřebuješ. Avšak co se týče konfliktů, určitě
bych si napsal testy na několik různých scénářů kde dojde ke
konfliktu, a zjistil co se přesně stane. To že je něco v
dokumentaci, je jedna věc, ale taky můžeš narazit na něco
kompletně jiného.</div>
<div class=""><br class="">
</div>
<div class="">Jen taková poznámka, nemůžou ty pokladny
předpokládat, že budou v 99.99% případů kdy je někdo použije
online, a tedy používat online databázi na serveru, a v případě
výpadku internetu bys použil lokální “kopii” kterou bys musel
synchronizovat po připojení. Samozřejmě by tam taky mohlo dojít
ke konfliktu, ale můj point je, že v naprosté většině případů
ten internet fungovat bude. Případně, pokud se jedná o tak
kritickou věc, stálo by za zvážení použít jiného poskytovatele
jako “fallback” připojení - ADSL+4G nebo něco podobného.</div>
<div class=""><br class="">
</div>
<div class="">Asi předpokládám, že jsi četl tenhle článek: <a
href="http://guide.couchdb.org/draft/conflicts.html#resolution"
class="" moz-do-not-send="true">http://guide.couchdb.org/draft/conflicts.html#resolution</a></div>
<div class=""><br class="">
</div>
<div class="">Lukáš<br class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">25. 9. 2018 v 19:08, Jan B. Kolář <<a
href="mailto:janbivoj.kolar@zazen-nudu.cz" class=""
moz-do-not-send="true">janbivoj.kolar@zazen-nudu.cz</a>>:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="content-type" content="text/html;
charset=utf-8" class="">
<div text="#000000" bgcolor="#FFFFFF" class="">
<p class="">Ahoj,</p>
<p class="">nemáte tu prosím někdo praktické zkušenosti
s CouchDB? Možná si vzpomínáte, že jsem tu před časem
psal ohledně pokladního software. Po zvážení všech
odpovědí jsem dospěl k názoru, že největší problém pro
mne je udržovat synchronizovaná data mezi pokladnami a
serverem. Jak věřím, tak CouchDB by pro mne tyto věci
dokázala ohlídat, trochu se ale potýkám s nedostatkem
informací. Kromě oficiálního manuálu se mi nepodařilo
najít příliš stránek, které by o nasazení CouchDB v
praxi psaly.</p>
<p class="">Nejsem si jist, zda jsem zcela správně
pochopil vnik a řešení konfliktů v CouchDB. Aktuálně
řeším problém skladů a skladových položek - myslel
jsem, že bych vytvořil dokument "produkt", který by
jako jednu z položek měl pole s dvojicemi
"sklad":"počet ks". Každá z pokladen by pak odečítala
ze svého řádku "sklad":"počet ks".<br class="">
</p>
<p class="">Jestli jsem to však z manuálu pochopil
správně, tak každá změna vyvolá změnu celého
dokumentu. A v případě, že dojde k výpadku jedné z
pokladen, dojde k vytvoření velkého množství
konfliktů, které se budou muset řešit ručně. Nebo se
mýlím? <br class="">
</p>
<p class="">Napadlo mne to vyřešit tak, že bych vytvořil
dokument "sklad" a v něm bych udržoval dvojice
"produkt_id":"počet ks". Kvůli nedostatku informačních
zdrojů si však nejsem jist, zda je tohle správný
přístup k problému.</p>
<p class="">Mohl by mi prosím někdo zkušenější poradit?</p>
<p class="">Díky, Honza<br class="">
</p>
<pre class="moz-signature" cols="72">--
Jan B. Kolář
Zažeň nudu
Hodolanská 17, 779 00 Olomouc
e-mail: <a class="moz-txt-link-abbreviated" href="mailto:janbivoj.kolar@zazen-nudu.cz" moz-do-not-send="true">janbivoj.kolar@zazen-nudu.cz</a>
<a class="moz-txt-link-abbreviated" href="http://www.zazen-nudu.cz/" moz-do-not-send="true">www.zazen-nudu.cz</a></pre>
</div>
_______________________________________________<br
class="">
Community-list mailing list<br class="">
<a href="mailto:Community-list@lists.vpsfree.cz" class=""
moz-do-not-send="true">Community-list@lists.vpsfree.cz</a><br
class="">
<a class="moz-txt-link-freetext" href="http://lists.vpsfree.cz/listinfo/community-list">http://lists.vpsfree.cz/listinfo/community-list</a><br
class="">
</div>
</blockquote>
</div>
<br class="">
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Community-list mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Community-list@lists.vpsfree.cz">Community-list@lists.vpsfree.cz</a>
<a class="moz-txt-link-freetext" href="http://lists.vpsfree.cz/listinfo/community-list">http://lists.vpsfree.cz/listinfo/community-list</a>
</pre>
</blockquote>
<br>
<pre class="moz-signature" cols="72">--
Jan B. Kolář
Zažeň nudu
Hodolanská 17, 779 00 Olomouc
tel: +420 605 800 859
e-mail: <a class="moz-txt-link-abbreviated" href="mailto:janbivoj.kolar@zazen-nudu.cz">janbivoj.kolar@zazen-nudu.cz</a>
<a class="moz-txt-link-abbreviated" href="http://www.zazen-nudu.cz">www.zazen-nudu.cz</a></pre>
</body>
</html>