Avatar billede johny Nybegynder
21. april 2008 - 22:45 Der er 5 kommentarer og
1 løsning

Concurrency - timestamp problemer

Jeg forsøger pt. at løse offline concurrency på bedst mulig måde, og har før arbejdet med timestamp, og synes det virkede ret godt, og vil derfor gerne bruge den tilgang igen.

Det har så nu ledt mig i problemer i forhold til, at jeg ikke kan finde en metode at tvinge en update af timestamp kolonnen igennem, uden at skulle lave ændringer på rækken hvori den sidder.

Det lyder umiddelbart heller ikke som noget der burde skulle bruges, men i mit tilfælde kan jeg ikke rigtig se hvordan jeg ellers skal kunne komme uden om det.

Jeg sidder nemlig med (bl.a. men holder mig til et udsnit for at simplificere det), en tabel der repræsenterer forskellige pladser at bo på, og det er i denne tabel (fremover kaldet 'spots') jeg har mit timestamp. I en tabel (fremover kaldet 'participants') som deler en key med 'spots' lister jeg så alle personerne der kan bo den tilhørende plads. I 'participants' har jeg imidlertid ikke nogen timestamp tabel.

Grunden til at jeg struktureret det således er, at jeg gerne vil have mulighed for at hive data ud kun fra den ene af de to tabeller og så efterfølgende opdatere dem. Ved uddrag fra 'participants' vil jeg naturligvis så også være nød til at hive værdien at timestamp tabellen i 'spots' med ud også. Men det jeg gerne vil opnå er nemlig, at en ændring der kun sker i den ene af tabellerne altid opdaterer den samme timestamp, så det er denne kolonne der fortæller om der er sket ændringer på pladsen.

Problemet vil ellers være hvis jeg havde adskilte timestamp kolonner, at en person hiver en række ud af 'participants', og opdaterer rækken. Lige før han gør dette, hiver en anden alle data ud for den plads, og derfor også den gamle uredigerede person ud af tabellen, og han retter så på data i 'spots' og comitter dette efter den anden update. Det vil han få lov til, da hans timestamp er gyldig i forhold til 'spots' tabellen, men de data han har ændret ud fra er forældede, fordi de ikke er baseret på den nye ændring i 'participants'.

Det er dette jeg gerne vil undgå og derfor kun have én timestamp kolonne på tværs af 2 tabeller. Kan det lade sig gøre? Og i så fald, hvordan tvinger jeg så en update igennem når jeg kun laver opdataringer af 'participants' tabellen? Og hvis dette er en dårlig måde at gøre det på, hvad skal jeg så gøre istedet?

Mange tak for hjælpen.

Med venlig hilsen
Johny Iversen
Avatar billede arne_v Ekspert
22. april 2008 - 00:43 #1
UPDATE tabel SET feltx=feltx WHERE felty=Z
Avatar billede arne_v Ekspert
22. april 2008 - 00:44 #2
Du sætter værdien af et felt til sig selv => samme værdi men TIMESTAMP opdateres.
Avatar billede johny Nybegynder
22. april 2008 - 06:52 #3
Ha ha, det var jo en lang forklaring for en meget simpel løsning. :) Jeg synes bare jeg har oplevet før, at hvis jeg ikke decideret lavede en ændring, at den så ikke ville opdatere rækken, men der husker jeg nok forkert så (har lige tjekket efter at det virker).

Men mange tak for hjælpen i hvert fald. :)

Lige i forhold til mit sidste spørgsmål, lyder det til at være struktureret korrekt, eller er det en dårlig løsning jeg har fået sat op her?
Avatar billede arne_v Ekspert
26. april 2008 - 21:44 #4
svar
Avatar billede arne_v Ekspert
26. april 2008 - 21:45 #5
Det lyder lidt tricky, men jeg kan ikke umiddelbart foreslå en anden løsning.
Avatar billede johny Nybegynder
27. april 2008 - 11:10 #6
Ja, det er lidt bøvlet, men kan heller ikke se nogen anden løsning. Tak for hjælpen.. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester