Autor Téma: synchronizace sdílených dat  (Přečteno 2973 krát)

Rustymattock

  • Host
synchronizace sdílených dat
« kdy: 03-12-2012, 08:43:02 »
Zdravím kluci.
Název vlákna může být zavádějící, ale pokusím se problém popsat.
Do databázy ukládám množinu dat (ty se neustále mění, čili žádné "odkladiště") a potřebuji aby se změna provedena na jednom klientovi, co nejdřív projevila i na všech ostatních. Ono "co nejdřív", není zase tak kritické, jedná se o cca 3-5 vteřin. Počet klientů pro daný problém 2-4.

Již mám nějakou představu jak na to,  ale nic podobného jsem nikdy nedělal. Tak bych si docela rád nechal poradit, jestli máte někdo zkušenosti, jak se přes databázi sdílí změny v tabulce.
Ono totiž dát aplikaci pokyn, aby každých 5 vteřin stáhla 2 kompletní tabulky (zhruba 500x30 a 100x15) a zjistila zda a co se za posledních 5 vteřin změnilo mi přijde nereálné... teda minimálně špatné řešení.

Moje předběžná smělá představa :-) :
1.Vytvořit třetí tabulku, kde se do fronty budou ukádat jen právě provedené změny (sloupce pro data + sloupec s boolean hodnotou pro každého klienta).
2.Klient, který záznam vytvoří, nastaví všechny booleany pro další klienty na False, vlastní na True  (vysvětlím)
3.Každých 5 vteřin si každý klient přečte první řádek. Když je jeho sloupec False, aktualizuje data z řádku a nastaví sloupec na True.
   KLient zároveň skontroluje, zda nejsou už všechny sloupce nastaveny na True (všichni klienti už data aktualizovali). Jestli ano, řádek se vymaže.
4. Jestli je dle bodu 3, klientův řádek stále "nesmazatelný", ale již nastaven na True, přečte další řádek a opakuje bod 3 (což ošetřuje skutečnost, že někteří klienti cíleně "zameškají" pár cyklů)

...posuďte, schvalte, zamítněte, navrhněte lepší...
děkuji

Offline Fala

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: XE2
    • Software pro poskytování technické podpory
Re:synchronizace sdílených dat
« Odpověď #1 kdy: 03-12-2012, 08:49:29 »
synchronizovat je asi blbost a asi by to ani nebylo dle tvých časových požadavků reálné. Spíš zkus popřemýšlet, si udělat pro daného uživatele tabulku přečtených záznamů.

Rustymattock

  • Host
Re:synchronizace sdílených dat
« Odpověď #2 kdy: 03-12-2012, 09:01:38 »
Spíš zkus popřemýšlet, si udělat pro daného uživatele tabulku přečtených záznamů.

co myslíš těmi přečtenými záznamy ?
Něco jiné, než jsem popisoval výše ?

Offline Fala

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: XE2
    • Software pro poskytování technické podpory
Re:synchronizace sdílených dat
« Odpověď #3 kdy: 03-12-2012, 13:19:35 »
myslel jsem, že by sis př změně mohl poznačit, že se to změnilo a ti co si to nepřečetli, tak by to viděli jako změnu. nicméně neznám přesně tvůj problém, ale zkusil bych najít jiné řešení, jak neustále refreshovat dotaz a vkládat množství záznamů.

Offline raul

  • Plnoletý
  • ***
  • Příspěvků: 233
  • Karma: 12
    • Verze Delphi: FPC :D
Re:synchronizace sdílených dat
« Odpověď #4 kdy: 03-12-2012, 15:48:17 »
Nema MS SQL neco jako v postgresu NOTIFY/LISTEN ? pak muzes nahodit trigger ktery zavola notify a klientum, kteri si nastavili listen prijde zprava co a jak. pak je moznost nacist znovu data. Jedu na postgreSQL a tam toto pozuivame velmi aktivne pro odmazavani cachi apod.
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux

Rustymattock

  • Host
Re:synchronizace sdílených dat
« Odpověď #5 kdy: 03-12-2012, 16:58:20 »
FALA: s vkládáním dat nemám problém. Ty se vloží, jen když dojde k nějaké změně (Tak, jak se to vždy dělá :-) )
Já spíš potřebuji ostatním klientům říct, že k té změně došlo.
Z toho co píšeš mi přijde, že potvrzuješ moji nadepsanou představu.

RAUL: sám v databázích zatim docela tápu, ale jdu si něco k tomu najít

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 574
  • Karma: 25
Re:synchronizace sdílených dat
« Odpověď #6 kdy: 03-12-2012, 21:06:15 »
Nema MS SQL neco jako v postgresu NOTIFY/LISTEN ?

SQLDependency

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 574
  • Karma: 25
Re:synchronizace sdílených dat
« Odpověď #7 kdy: 03-12-2012, 21:08:22 »
Já spíš potřebuji ostatním klientům říct, že k té změně došlo.

přijde na to, co konkrétně potřebuješ řešit. Pokud jenom updaty a inserty, tak stačí pamatovat si timestamp poslední synchronizace klienta a getnout si záznamy, které mají větší timestamp než byl ten při poslední kontrole a ten si pamatovat pro příště. Pro mazání je potřeba někam uložit info o tom, co bylo smazané. Nebo nemazat a záznamy jenom označovat jako smazané.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: