locked
szerver es laptopok RRS feed

  • Question

  • hali

    van az alabbi feladatra "kiforrott" modszer?

     

    adott egy szerver es 4 laptop,

    sql2005 rol van szo, a szerver enterprise, a kliensek express

     

    egy adatbazis 6-7 tablaval, amibol 1-2 az nagyon ritkan valtozik (kodszotar, konfiguracios tabla) van 1-2 olyan amibe csak beszurni lehet de a tobbi az olyan amiben lehet insert is meg update is. ezek kozt is akad 1 amiben sok mezo van  (20nal tobb) a tobbiben keves (5-6)

     

    a problema:

    ha bent van a laptop a kozpontban, akkor halozaton at eleri a szervert

    de ha nincs bent, akkor is dolgoznak a laptopon, tehat kerulnek be uj rekordok es valtoznak meg rekordok. maikor bemegy a laptop az irodaba, akkor szinkronba kell hozni a 2 adatbazist.

    es 4 laptop van amik egymastol fuggetlenul akar ugyan azt a rekodot is modostihatjak (akar meg ugyan azt a mezot is!)

     

    es persze szepen be kene mindenkit szinkorizalni.

    ami tulkepp 3 esetet jelent:

    - belepek a laptoppal a halozatba

    - a halozaban dolgozom es masok is dolgoznak itt

     ennek egy specialis esete amikor belep egy masik laptop is a halozatra

    - kilepek a halozatrol (ez ha minden jol megy igazabol nincs, mert a "halozatban dolgozom" allapotban jo lenne minnel naprakeszebben tartani a lokalis DB-t.

     

    a valtozasok mennyisege laptoponkent:

    napi 10-20 uj rekord olyan tablakba, amikbe csak insert lehet

    napi 3-5 update/ insert olyan tablakba, amin lehet update is

     

    en mar egy hete ragodom kulonfele verziokon Smile ezert erdekelne, hogy van-e erre elfogadott, bevalt jo modszer Smile meg persze minden egyeb otlet, hogy ki hogyan csinalna Smile szoval johet minden, reszmegoldasok is (pl megoldas csak az insertes tablakra vagy csak az update tablakra)

     

    Friday, April 6, 2007 12:12 PM

Answers

  • Szia,

     

    Én Merge replikációval próbálkoznék, abból is az SQL2K-ban is ismert "central publisher" modellel. A központ lenne a kiadó (publisher), a laptop-ok pedig lennének az előfizetők (subscriber, az express változat, csak előfizető lehet a merge replikációs modellben). SQL2K-s környezetben közel 5 éve üzemeltetek egy hasonló modellt, annyi külöbséggel, hogy ebben a modellben a kiadó mellett csak 1 előfizető laptop van + 6 távoli telephely (ezek is előfizetők, régebben, amíg kicsi volt a DB, <2GB, MSDE-k voltak, mára már mindegyik Standard Edition). A modellemben van particionálás, dinamikus filterezés, meg minden, amit el tudsz képzelni, de ez a Te példádhoz képest egy hatalmas DB, kb. 100 replikált táblával (ezen felül mégegyszer ennyi nem szinkronizált tábla halmaz). A laptop érdekessége, hogy gyakorlatilag egy egészségügyi szűrőbuszon van, amely a helyhez kötött telephelyek körzetében végez lakossági szűrést, így az adatrögzítéshez a laptop-on mindig arra a telephelyre kell bejeltkezni és adatokat tárolni, ahol a szakmai kiértékelést majd el fogják végezni (amelyik a legközelebbi helyhez kötött centrum).

     

    Ami viszont kemény dolog lesz az hosszú ideig tartó aszinkron offline adatrögzítésből következő konfliktuskezelés, amikről Te is írtál és nyílván ezeken töprengsz. Ennek vannak egyszerűbb esetei és nagyon bonyolult esetei is. Pl. ha 2 offline telephely szerkeszti ugyanazt a sort, akkor megoldható az oszlop szintű követés (column tracking) így amennyiben eltérő oszlopok módosultak, automatikusan megtörténik az összefésülés. Ha ugyanazt a cellát módosítják, egy online rendszerben is konfliktus helyzet alakul ki, egy eredendően optimista zárolást végző rendszer, vagy a "last in wins", vagy egy ügyesebb GUI-n megmutatott felhasználói beavatkozásos változás összefésülő algoritmus fut le (egy ilyen megírása sem egyszerű, de nem elképzelhetetlen).

     

    Tervezéskor mindeképpen érdemes bekalkulálni az auto inkrementes oszlopok kezelését (vagy eltérő identity range-ekkel dolgozni, vagy összetett kulcsokat alkalmazni, amelyben az ID mellett, egy telephelyazonosító alkotja a kulcsot, így a PK violation elkerülhető, vagy egy méretben, sebességben erőforrsáigényesebb, viszont globális egyediséget adó GUID típusú PK-kal dolgozni). Az is tény, hogy egy jó tervezéssel a konfliktusok keletkezésének valószínűsége csökkenthető, ha nem is szűntethető meg teljesen.

     

    Vallom, hogy a merge replikáció nem egy transzparens, a meglévő DB-nkhez néhány kattintással hozzáadható kiegészítő szolgáltatás. A hosszú távú jól működő, gondtalan renszer kialakításának előfeltétele egy gondos előkészítői, tervezői és fejlesztői munka...

     

    A merge szinkron alatt keletkező hibák az ún. "custom resolver" eljárásban feloldhatók, amely eljárást mi magunk tudjuk megírni, vagy tovább delegálhatjuk a problémát a GUI-ra és ezzel a megdás felelősségét a felhasználókra terhelni (pl. az utolsó szinkron óta 2 előfizetőn is átírták ugyanazt a lakcímet, 2 eltérő értékre, a fejlesztő ezt a problémát nem tudja megoldani, persze lehet itt is a "last in wins"-t alkalmazni, vagy azt mondani, hogy az x. előfizetőnek prioritása van ebben a kérdésben).

     

    SQL2000-ben a merge replikáció kofliktuskezelési automatizmusának testreszabásához a köv. eszközkészlet állt rendelkezésre:

    1. Előre elkészített resolver sablonok (Additive, Averaging, DATETIME (Earlier Wins/Later Wins), Subscriber Always Wins, Minimum, Maximum, stb.)
    2. Saját tárolt eljárás meghívása, "custom stored procedure resolver" (ez csak UPDATE konfiktusokat kezelt), paraméterben megkapta a konliktus főbb jellemzőit, az előfordulás GUID azonosítóját).
    3. Az ICustomResolver interfészt megvalósító COM komponens készítése (DLL), a fentivel ellentétben ez minden típusú konliktts kezelésére alkalmas volt
    4. Interaktív resolver meghívása (a Windows Synchronization Manager GUI-s eszköz segítségével), az op. rendszer nyelvének megfelelő fordításban igyekezett kilistázni 2 gép szinkronizálása alatt konfliktusba került sorokhoz tratozó oszlopértékeket és az eltérő oszlopokat feélkövéren hozta, nyomógombokkal lehetett választani, hogy helyben hagyjuk a default resolver döntését, vagy felülbíráljuk és a másik szerver (a konfliktusban alulmaradt) eredményét hagyjuk érvényben.
    5. Merge ActiveX vezérlők és az SQL-DMO, amelyeket saját alkalmazásunkból használhattunk a szinkronizálási folyamat monitorozására és a beavatkozásra, menedzselésre.

    SQL2005-ben a konfliktuskezeléshez a fentiek jó része még használható, de pl. a korábbi ActiveX vezérlők és az SQL-DMO nem támogatottak (http://msdn2.microsoft.com/en-us/library/ms143550.aspx), elkészült ugyanis egy új objektum modell: RMO (Replication Management Object).

     

    Bővebben:

    Programming with Replication Management Objects

    http://msdn2.microsoft.com/fr-fr/library/ms146869.aspx

     

    Advanced Merge Replication Conflict Detection and Resolution

    http://msdn2.microsoft.com/en-us/library/ms151257.aspx

     

    Exchanging Data with Mobile Users

    http://msdn2.microsoft.com/en-us/library/ms151323.aspx

     

    The Advantages of Microsoft Merge Replication for Mobile and Distributed Applications

    http://download.microsoft.com/download/a/4/7/a47b7b0e-976d-4f49-b15d-f02ade638ebe/SQL2005MergeComparitive.doc

     

    Microsoft Replication Conflict Viewer and Interactive Resolver

    http://msdn2.microsoft.com/en-us/library/ms186562.aspx

     

    Remélem adtam szempontokat a merengéshez... Smile

    Saturday, April 7, 2007 5:13 PM

All replies

  • egy aprosag, arra termeszetesen van lehetoseg, hogy gazos esetben rakerdezunk a usernel, hogy ezzel mi legyen.

    tehat ha pl egy rekordban ugyan azt a mezot tobben is piszkaltak, akkor ra lehet kerdezni annal akieppen bekapcsolodott a halozatram hogy mi legyen, a halozati vagy az ove?

    de azert az ilyen kerdesek szamanak minimalizalas fontos cel Smile

    Friday, April 6, 2007 2:36 PM
  • Szia,

     

    Én Merge replikációval próbálkoznék, abból is az SQL2K-ban is ismert "central publisher" modellel. A központ lenne a kiadó (publisher), a laptop-ok pedig lennének az előfizetők (subscriber, az express változat, csak előfizető lehet a merge replikációs modellben). SQL2K-s környezetben közel 5 éve üzemeltetek egy hasonló modellt, annyi külöbséggel, hogy ebben a modellben a kiadó mellett csak 1 előfizető laptop van + 6 távoli telephely (ezek is előfizetők, régebben, amíg kicsi volt a DB, <2GB, MSDE-k voltak, mára már mindegyik Standard Edition). A modellemben van particionálás, dinamikus filterezés, meg minden, amit el tudsz képzelni, de ez a Te példádhoz képest egy hatalmas DB, kb. 100 replikált táblával (ezen felül mégegyszer ennyi nem szinkronizált tábla halmaz). A laptop érdekessége, hogy gyakorlatilag egy egészségügyi szűrőbuszon van, amely a helyhez kötött telephelyek körzetében végez lakossági szűrést, így az adatrögzítéshez a laptop-on mindig arra a telephelyre kell bejeltkezni és adatokat tárolni, ahol a szakmai kiértékelést majd el fogják végezni (amelyik a legközelebbi helyhez kötött centrum).

     

    Ami viszont kemény dolog lesz az hosszú ideig tartó aszinkron offline adatrögzítésből következő konfliktuskezelés, amikről Te is írtál és nyílván ezeken töprengsz. Ennek vannak egyszerűbb esetei és nagyon bonyolult esetei is. Pl. ha 2 offline telephely szerkeszti ugyanazt a sort, akkor megoldható az oszlop szintű követés (column tracking) így amennyiben eltérő oszlopok módosultak, automatikusan megtörténik az összefésülés. Ha ugyanazt a cellát módosítják, egy online rendszerben is konfliktus helyzet alakul ki, egy eredendően optimista zárolást végző rendszer, vagy a "last in wins", vagy egy ügyesebb GUI-n megmutatott felhasználói beavatkozásos változás összefésülő algoritmus fut le (egy ilyen megírása sem egyszerű, de nem elképzelhetetlen).

     

    Tervezéskor mindeképpen érdemes bekalkulálni az auto inkrementes oszlopok kezelését (vagy eltérő identity range-ekkel dolgozni, vagy összetett kulcsokat alkalmazni, amelyben az ID mellett, egy telephelyazonosító alkotja a kulcsot, így a PK violation elkerülhető, vagy egy méretben, sebességben erőforrsáigényesebb, viszont globális egyediséget adó GUID típusú PK-kal dolgozni). Az is tény, hogy egy jó tervezéssel a konfliktusok keletkezésének valószínűsége csökkenthető, ha nem is szűntethető meg teljesen.

     

    Vallom, hogy a merge replikáció nem egy transzparens, a meglévő DB-nkhez néhány kattintással hozzáadható kiegészítő szolgáltatás. A hosszú távú jól működő, gondtalan renszer kialakításának előfeltétele egy gondos előkészítői, tervezői és fejlesztői munka...

     

    A merge szinkron alatt keletkező hibák az ún. "custom resolver" eljárásban feloldhatók, amely eljárást mi magunk tudjuk megírni, vagy tovább delegálhatjuk a problémát a GUI-ra és ezzel a megdás felelősségét a felhasználókra terhelni (pl. az utolsó szinkron óta 2 előfizetőn is átírták ugyanazt a lakcímet, 2 eltérő értékre, a fejlesztő ezt a problémát nem tudja megoldani, persze lehet itt is a "last in wins"-t alkalmazni, vagy azt mondani, hogy az x. előfizetőnek prioritása van ebben a kérdésben).

     

    SQL2000-ben a merge replikáció kofliktuskezelési automatizmusának testreszabásához a köv. eszközkészlet állt rendelkezésre:

    1. Előre elkészített resolver sablonok (Additive, Averaging, DATETIME (Earlier Wins/Later Wins), Subscriber Always Wins, Minimum, Maximum, stb.)
    2. Saját tárolt eljárás meghívása, "custom stored procedure resolver" (ez csak UPDATE konfiktusokat kezelt), paraméterben megkapta a konliktus főbb jellemzőit, az előfordulás GUID azonosítóját).
    3. Az ICustomResolver interfészt megvalósító COM komponens készítése (DLL), a fentivel ellentétben ez minden típusú konliktts kezelésére alkalmas volt
    4. Interaktív resolver meghívása (a Windows Synchronization Manager GUI-s eszköz segítségével), az op. rendszer nyelvének megfelelő fordításban igyekezett kilistázni 2 gép szinkronizálása alatt konfliktusba került sorokhoz tratozó oszlopértékeket és az eltérő oszlopokat feélkövéren hozta, nyomógombokkal lehetett választani, hogy helyben hagyjuk a default resolver döntését, vagy felülbíráljuk és a másik szerver (a konfliktusban alulmaradt) eredményét hagyjuk érvényben.
    5. Merge ActiveX vezérlők és az SQL-DMO, amelyeket saját alkalmazásunkból használhattunk a szinkronizálási folyamat monitorozására és a beavatkozásra, menedzselésre.

    SQL2005-ben a konfliktuskezeléshez a fentiek jó része még használható, de pl. a korábbi ActiveX vezérlők és az SQL-DMO nem támogatottak (http://msdn2.microsoft.com/en-us/library/ms143550.aspx), elkészült ugyanis egy új objektum modell: RMO (Replication Management Object).

     

    Bővebben:

    Programming with Replication Management Objects

    http://msdn2.microsoft.com/fr-fr/library/ms146869.aspx

     

    Advanced Merge Replication Conflict Detection and Resolution

    http://msdn2.microsoft.com/en-us/library/ms151257.aspx

     

    Exchanging Data with Mobile Users

    http://msdn2.microsoft.com/en-us/library/ms151323.aspx

     

    The Advantages of Microsoft Merge Replication for Mobile and Distributed Applications

    http://download.microsoft.com/download/a/4/7/a47b7b0e-976d-4f49-b15d-f02ade638ebe/SQL2005MergeComparitive.doc

     

    Microsoft Replication Conflict Viewer and Interactive Resolver

    http://msdn2.microsoft.com/en-us/library/ms186562.aspx

     

    Remélem adtam szempontokat a merengéshez... Smile

    Saturday, April 7, 2007 5:13 PM
  • váó!

    ezer köszönet! ismét tanulam/tanulok valami újat Smile

    hetvégén olvasás (meg pirostojás Smile ) aztán kedden mehet a próbálkozás Smile

    tutti lesznek még kérdéseim, ahogy így elnézem Smile de az nagyon jó, hogy van rá "gyári" megoldás.

     

    Saturday, April 7, 2007 5:57 PM