Gå til innhold

Flere datakilder synkronisert mot samme database/server


Anbefalte innlegg

Hei!

 

Jobber med å lage ett system for registrering av personell/personer inn og ut via adgangskort. Dette skal gjøres via flere terminaler som kobles opp mot en felles database/server.

 

Hver terminal består av en Raspberry Pi, en RFID-kortleser og en LCD-skjerm, montert i en koffert. Disse skal i første omgang kobles opp via kablet nettverk, men på sikt skal de fungere både via trådløst nettverk og mobilt nettverk.

 

Serveren er en Linux server med databaseserver og webserver.

 

I utgangspunktet så bør dette være en enkel jobb. Når ett kort registreres så tar terminalen og sender info om dette til serveren som da registrerer dette i databasen. Problemet her blir at disse terminalene skal fungere 100% frakoblet, og så snart serveren er tilgjengelig så skal informasjonen synkroniseres dit. Det kan også forekomme at serveren ikke er kontaktbar i perioder, og informasjonen må da fortsatt tas vare på til den blir tilgjengelig.

 

Eg har i dag laget en fungerende terminal som leser kort, registrerer dette i en lokal sqlite database og dette blir deretter synkronisert opp mot en sentral server en gang i minuttet dersom serveren er tilgjengelig.

 

Utfordringen kommer når det skal være to eller flere terminaler tilgjengelig. Noen forslag til hvordan eg skal få laget flyten her samtidig som en unngår feilregistrering av data? Ett scenario her kan være att terminal 1 og 2 er online og får kontakt med server, mens terminal 3 ikke gjør det. Så kommer det en person som registrerer seg _inn_ på terminal 1, og _ut_ på terminal 3. Terminal 3 "vet" da ikke at personen har registrert seg _inn_ på terminal 1, og blir derfor og registrert _inn_ på terminal 3 også.

 

Forskjellen på å registrere seg inn og ut er i praksis at de registrerer seg inn når de ankommer stedet, og ut når de reiser derifra. Dataene som eg er på jakt etter via dette systemet er ID på kortet samt samlet tid mellom inn- og utregistrering.

 

Dette skal brukes i beredskapssituasjoner og det er da alltid ett spørsmål om etableringstid og sikkerhet. Når dette systemet trengs så må det derfor være mulig å ta i bruk alle terminalene som er tilgjengelig for å starte registrering av personell, og så må da systemet takle at serveren dette skal lagres på ikke er tilgjengelig før senere, uten at dette kødder til datagrunnlaget.

 

Serveren må også vite status på hver enkelt person, dvs om de er registrert inn eller er registrert ut.

 

Forslag? :)

Lenke til kommentar
Videoannonse
Annonse

Hei,

 

Den normale måten å løse synkronisering på, er å bruke spillelister.

 

F.eks når terminal 3 er online og skal synkronisere, så laster den inn spillelista frå der den slapp sist frå serveren. På den måten vil du fange opp at personen har tidligere registrert seg inn på terminal 1 og dermed må du handtere konflikta med at han også er registrert inn på terminal 3.

Lenke til kommentar

Men da tenker du at konflikten skal løses i koden på terminal 3, og så lastes opp til server? Har metoden ett standard navn? :)

 

Utfordringen der blir å vite evnt rekkefølgen. En ting eg ikke kom på å ta med sist er at antall terminaler kan variere veldig, og hvilke som blir brukt. Det kan for eks være at terminal 1 og 3 er i bruk, men ikke 2.

 

Eg lurer litt på om eg skal tenke litt annerledes. Dvs at eg kutter ut behovet for at terminalene vet om status er inne eller ute. Dvs at terminalen _kun_ skal lese av kortet og tidspunktet, og sende dette videre til server. Så kan serveren foreta konflikthåndteringen, og den enkleste løsningen da tror eg vil være at flere avlesninger innenfor ett gitt tidsrom(5-10 minutt for eks) tolkes som ett. Og en liten feilsjekk her kan være at avlesningene fortsatt er tilgjengelige, men kun den første blir "gyldig". Slik at når en evnt tar en kontroll i etterkant så kan en fortsatt rette opp i evnt feil.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...