Ahoj,
prave proto jsem navrhoval pouzit buffer (cache) rovnou a odesilat
uctenky na server az pozdeji (cronem kazdou minutu?).
Pak neresis jestli funguje spojeni nebo ne, ale jestli se ti pocedlo
odeslani te jedne uctenky nebo nebo.
A podle toho ji pak z cache vymazes nebo ne.
Co se produktove db tyka, bude pouzijes replikaci, coz v jednoduchem
master-slave nastaveni by melo fungovat ok.
Nebo muzes do tabulky s produktama pridat sloupec "global_id", ktery
budes incrementovat vzdy pri kazde zmene.
Pokladna si pak stahne jen zaznamy s novejsim "global_id" nez stahla
posledne.
Zase v tomto pripade nebude vadit, kdyz pripojeni k serveru na nejakou
dobu padne.
Nevyhoda takovehoto postupu je, ze nepoznas smazane produkty.
Dalsi co me napada je udelat tabulku "transactions" se sloupecky
"global_id", "product_id", "operation".
Tam ulozis zaznam pri kazde zmene a pokladny se pak mohou syncovat
oproti teto tabulce.
Zase si pokladna bude jen pamatovat posdleni stahnute "global_id".
Mirek
On 2.7.2018 16:14, Jan B. Kolář wrote:
Díky všem za jejich reakci a omlouvám se za moje
poněkud delší odezvy. Sedím
zrovna za pultem a zatím co odpovídám, tak ještě obsluhuji zákazníky :-D
V podstatě se mi zdá jako nejjednodušší řešení to, co míše Martin. Můj problém
ale je, že úplně přesně nevím, jak bych to měl v PHP implementovat. Tedy
první, co mě napadlo je, že bych použil dvě databáze - vzdálenou přes SSH
tunel a lokální. Standardně bych pracoval se vzdálenou databází a pokud by se
PHP nepodařilo ke vzdálené databázi připojit, tak by začalo pracovat s lokální
databází a ukládalo si účtenky, které vystavilo pro pozdější synchronizaci.
Jakmile by se spojení obnovilo, tak by se appka pokusila všechno z lokální
databáze nahrát do vzdálené databáze na server.
Hned první, co mě ale napadá je, jak appka pozná, že je spojení přerušeno/
navázáno? Tedy pokud budu při každém požadavku čekat na timeout vzdálené
databáze, tak se ta aplikace asi brutálně zpomalí, ikdyž tam dám třeba jen 1s
timeout.
Čím si však vůbec nejsem jistý, jakým způsobem bych měl řešit tu cache
produktů? To mám třeba co hodinu stahovat celou produktovou tabulku ze
vzdálené databáze a ukládat ji lokálně? Jde sice jen o cca. 2 tisíce produktů
a dvě pokladny, ale přesto...
Neviděl jste někdo nějakou implementaci takového problému, že bych se mohl
podívat na kód?
Dne pondělí 2. července 2018 13:18:36 CEST jste napsal(a):
> Dne 2.7.2018 v 11:26 Jan B. Kolář napsal(a):
>> Začal jsem si tedy pohrávat s myšlenkou, že bych aplikaci přesunul na
>> každou pokladnu zvlášť (tzn. na pokladně by běžel nginx, PHP a mysql) a
>> na server si dělal jen replikaci databází, abych pak mohl dělat z
>> pokladen výkazy, aniž by byly v běhu.
> Nebylo by jednodušší používat lokální databázi na pokladnách jen jako
> cache produktů a buffer účtenek? Databáze na serveru bude hlavní.
> Pokladny si z ní v definovaných intervalech budou aktualizovat cache
> produktů a průběžně do ní budou zapisovat nové účtenky, které se
> serverem Ministerstva vyřídí samy. Když ale selže spojení s hlavní
> databází, účtenka se zapíše do bufferu a na server se uloží až
> dodatečně, až se spojení zase obnoví.
>
> S pozdravem,
> Maritn Doucha