FM5: andmete sünkroniseerimine

Mustri tüüp: funktsionaalne muster
Peamine kasusaaja:
automatiseeritud süsteem
Eesmärk
: andmete pärimine, andmete saatmine
Allikas
: eksperthinnang
Teenuste arv:
1

Abstract

FM5: Periodic data synchronization is used when an information system needs to periodicaly sync its data with another information system. The main idea of the pattern is to use syncronization messages, that only contain the changes since the last syncronization message.

The pattern proposes defining the data synchronization message as a set of three arrays:

  • An array containing instances that have been created after the last syncronisation message;
  • An array containing values that have been changed since the last syncronisation message;
  • An array containing instances that have been deleted after the last syncronisation message.

The proposed message structure can be used with primitives "PM1: Data pull service" and "PM2: Data push service", depending on who initiates the data syncronization.

Sissejuhatus

Käesolev muster kirjeldab sünkroniseeritavate andmete esitatamist X-tee teenustes. Kirjeldatud struktuur sobib olukorras, kus üks infosüsteem edastab perioodiliselt enda andmetes toimunud muudatusi teisele infosüsteemile. Mustri juures on eelduseks võetud, et andmeid sünkroniseeritakse regulaarselt ja seega ei ole vaja iga kord edastada kogu andmebaasi sisu. Seetõttu piisab ainult kindla perioodi jooksul tehtud muudatuste edastamisest.

Käesoleva mustri juures eristame kahte poolt:

  • andmeid omav infosüsteem infosüsteem, kus toimub andmete kogumine ja muutmine;
  • andmeid vajav infosüsteem infosüsteem, mis kasutab andmeid koguva infosüsteemi andmeid oma äriprotsessis.

Mustris kirjeldatud sünkroniseerimise sõnumi struktuur sobib kasutamiseks primitiivides "PM1: andmete päringu teenus" ja "PM2: andmete saatmise teenus".

Probleem

Käesolev muster sobib kasutamiseks olukorras, kus on vajalik lahendada andmete vahetus sissejuhatuses nimetatud poolte vahel ning:

  • andmeid vajaval infosüsteemil peab olema andmetest oma lokaalne koopia;
    • andmeid omav infosüsteem ei saa andmete muudatusi saata muudatuse toimumise hetkel;
    • andmeid vajav infosüsteem ei saa andmeid pärida;
  • andmeid vajava infosüsteemi lokaalne koopia võib olla andmeid omava infosüsteemi andmetest ajaliselt maas (ehk andmemuudatused ei pea koheselt jõudma andmeid vajavasse infosüsteemi).

Lahendus

Lahendusena luuakse X-tee teenus, mida kasutatakse sünkroniseerimise eesmärgil perioodiliselt. Teenuses esitatakse andmete muudatused vastavalt järgnevas peatükis toodud kirjeldusele.

Teenuse kirjeldus

Sünkroniseerimise sõnumis eitatakse andmete muudatused kolmes massiivis:

  • esimeses massiivis on iga uue kirje kohta üks element. Iga element sisaldab uue kirje nimetust, uue kirje unikaalset tunnust, kirje loomise aega ja uue kirje esialgseid väärtuseid;
  • teises massiivis on iga muudatuse kohta üks element. Iga element sisaldab muudetud kirje nimetust, muudetud kirje unikaalset tunnust, muudetud andmevälja nimetust, muudatuse järgset väärtust ja muudatuse aega;
  • kolmandas massiivis on iga kustutatud kirje kohta üks element. Iga element sisaldab kustutatud kirje nimetust, kustutatud kirje unikaalset tunnust ja kustutamise aega.

Teenuse täpne kirjeldus oleneb sellest, kas järgitakse primitiivi "PM1: andmete päringu teenus" või primitiivi "PM2: andmete saatmise teenus":

Järgnevalt on toodud andmete muudatuste esitamise WSDL näide.

</schema>
    <complexType name="synchronizationMessage">
        <!-- Syncronization message structure -->
        <sequence>
<element name=”newRecordElement” type=”NewRecord”/>
</sequence> <sequence>
<element name=”updateRecordElement” type=”UpdatedRecord”/>
</sequence> <sequence>
<element name=”deleteRecordElement” type=”DeletedRecord”/>
</sequence> </complexType> <complexType name=“NewRecord”> <!-- Definition of an array that contains added records --> <element name=”RecordType” type=”String”/> <element name=”RecordId” type=”long”/> <element name=”CreateTime” type=”dateTime”/> <element name=”Attribute1” type=”String”/> <element name=”Attribute2” type=”int”/> .... </complexType> <complexType name=“UpdatedRecord”> <!-- Definition of an array that contains updates --> <element name=”RecordType” type=”String”/> <element name=”RecordId” type=”long”/> <element name=”UpdateTime” type=”dateTime”/> <element name=”UpdatedAttribute” type=”String”/>
<element name=”NewValue” type=”xsd:anyType”/> </complexType> <complexType name=“DeletedRecord”> <!-- Definition of an array that contains deleted records --> <element name=”RecordType” type=”String”/> <element name=”RecordId” type=”long”/> <element name=”DeleteTime” type=”dateTime”/> </complexType> .... </schema>

Mustri käitumine

Massiivide täitmisel leitakse kõik alates viimasest sünkroniseerimisest lisatud, muudetud ja kustutatud kirjed. Iga kirje kohta lisatakse üks element vastavas massiivis. Igas massiivis olevad muudatused järjestatakse ajalises järgnevuses alustades kõige varasemast.

Andmeid vajas süsteemis oleva koopia uuendamisel töödeldakse muudatuste massiivid järjest. Muudatuse korral tehtav operatsioon (lisamine, muutmine või kustutamine) sõltub sellest, millises massiivis konkreetne muudatus asub.

Sünkroniseerimise algataja oleneb sellest, kas järgitakse primitiivi "PM1: andmete päringu teenus" või primitiivi "PM2: andmete saatmise teenus":

Lisakaalutlused

Käesoleva mustri kasutamisel tuleks silmas pidada järgnevat:

  • andmeid omavas infosüsteemis tuleb iga andmete muudatuse aeg salvestada;
  • andmeid omavas süsteemis peab igal kirjel olema ajas muutumatu ja unikaalne identifikaator;
  • mõne sünkroniseerimise sõnumis kirjeldatud massiivi võib ära jätta juhul, kui see ei ole andmeid vajava infosüsteemi äriprotsessi seisukohalt oluline;
  • lisaks sünkroniseerimisele tuleb lahendada ka andmeid vajava infosüsteemi lähtestamine, sest esimene sünkroniseerimise sõnum võib muidu osutuda liiga suurteks;
  • vähemalt üks pool peab järge pidama selle üle, millal viimane edukas sünkroniseerimine toimus;
  • poolte vahel tuleb kokku leppida sünkroniseerimise sagedus.



Viimati muudetud: kolmapäev, 26. oktoober 2016, 16.41