Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Aktualizace změn v databázi do klientů

Ahoj,
potřeboval bych poradit, jak nejlépe a nejefektivněji refreshnout data v klientském programu (napsán v C#).
Mám databázi (MySQL) s několika tabulkami a desktopového klienta, kterého ovládá uživatel, který s daty pracuje - přidává/maže/upravuje (data se okamžitě promítají do databáze). Doteď byl klient využíván z jednoho místa, tudíž data byla přímo synchronizována a aktuální.
Nyní se ale s daty bude pracovat z dvou míst a proto bude potřeba mít data v obou klientech aktuální. Když něco změním/přidám v místě 1, musí to být vidět i v místě 2 nejlépe automaticky a okamžitě.
Jak toto nejlépe vyřešit? Nastavit nějaký interval (10 vteřin?) během kterého se vždy stáhnou tabulky, ve kterých nejčastěji dochází ke změnám? Nebo přidat nějaké tlačítko, které bude dělat to samé, akorát manuálně? Nebo lze nějak "poslouchat" změny v databázi a pak provést nějaké příslušné úkony?

Díky za rady a zkušenosti.

Předmět Autor Datum
Nebo lze nějak "poslouchat" změny v databázi a pak provést nějaké příslušné úkony? Nelze. Oba klie…
MaSo 17.04.2013 15:19
MaSo
Přímo? Mám hosting s MySQL serverem a databází o 4 tabulkách a z C# se na něj připojuji klasicky pře…
freez2 17.04.2013 19:03
freez2
Zamykání jo? To je nastavení toho MySQL serveru ale, ne? Ne, přečti si odkaz, který jsem sem dal.…
MaSo 17.04.2013 19:24
MaSo
To už asi ne, vyřešil bych to tím manuálním refreshem přes tlačítko. poslední
freez2 17.04.2013 19:45
freez2
Mozes si vytvorit specialnu tabulku a do nej ukladat datum poslednej modifikacie, najlepsie pre kazd…
palos9 17.04.2013 15:43
palos9
Buď nebo teď mi napadlo, udělat si tabulku s 4 boolean hodnotami (mám 4 tabulky v DB) a jakmile prov…
freez2 17.04.2013 19:05
freez2
Klient který data odeslal první by přece pořád viděl True a pořád nastavoval False.
albru123 17.04.2013 19:09
albru123
Problém je, že uživatel vytváří nová data, a najednou se mu tabulka aktualizuje, naskočí jeho záznam…
albru123 17.04.2013 19:07
albru123
Naozaj potrebuješ obnovovať dáta v reálnom čase? V 99 % prípadov stačí obnovovať dáta len vtedy, keď…
los 17.04.2013 19:38
los
Ok, takže jak už i MaSo psal, přidat nějaké tlačítko, které refresh provede...
freez2 17.04.2013 19:44
freez2

Nebo lze nějak "poslouchat" změny v databázi a pak provést nějaké příslušné úkony?

Nelze.

Oba klienti jdou do stejné databáze přímo? Nebo přes nějaký server?

Taky budeš muset řešit zamykání záznamů. Aby nemohli oba klienti měnit stejný záznam.
http://stackoverflow.com/questions/129329/optimist ic-vs-pessimistic-locking

Zamykání jo? To je nastavení toho MySQL serveru ale, ne?

Ne, přečti si odkaz, který jsem sem dal.

Proč se musí data, na obou klientech refreshovat automaticky? Nestačí dát do klienta tlačítko refresh? Ať si user sám rozhodne, kdy si data refreshne.

EDIT: Pokud to chceš, fakt automaticky, tak nejlepší řešení je dát před databázi server, kterému se budou ostatní klienti připojovat. Při zápisu do DB některým z klientů, pak server uvědomí ostatní klienty, že si mají refreshnout data.

Mozes si vytvorit specialnu tabulku a do nej ukladat datum poslednej modifikacie, najlepsie pre kazdu tabulku zvlast.
Pri zapise okrem beznych dat zapises do tej specialnej datum a cas a zaroven si to zapamatas aj na klientovi.

A potom si klient kazdych par sekund porovna svoj posledny zapis s tym co je v DB. Ak sa nezhoduju, stiahnes tabulku.
Takto zabranis, aby sa ti tahali kvanta dat aj ked neboli vobec zmenene.

Buď nebo teď mi napadlo, udělat si tabulku s 4 boolean hodnotami (mám 4 tabulky v DB) a jakmile provedu v nějaké změnu, nastavím boolean na true, druhý klient se bude třeba po 10 vteřinách dotazovat na tyto booleany a pokud nějaký bude true, stáhne tabulku, ve které došlo ke změně a boolean nastaví na false.

Problém je, že uživatel vytváří nová data, a najednou se mu tabulka aktualizuje, naskočí jeho záznam upravený a data jsou v tahu, určitě by se tomu dalo zabránit, ale v takových situacích je to stejné jako u Version systémů (SVN, Git), musíš si dávat pozor jestli data někdo neodeslal/upravil před tebou a ty mu nezničíš jeho práci.

Naozaj potrebuješ obnovovať dáta v reálnom čase? V 99 % prípadov stačí obnovovať dáta len vtedy, keď si to používateľ explicitne vyžiada. Plus pri ukladaní do databázy kontrola, či neboli údaje medzičasom aktualizované niekým iným.

Zpět do poradny Odpovědět na původní otázku Nahoru