Avatar billede forgalt Nybegynder
08. september 2003 - 13:58 Der er 13 kommentarer og
2 løsninger

Er der behov for synkronisering af db adgang?

Hvis man forestiller sig en server der tilbyder database adgang for x klienter. Er der så et behov for at synkronisere database tilgangen, således at der ikke opstår samtidig opdatering af en tubel i databasen. Så vidt jeg kan læse mig til på MySQL anvender dette database system table locking. Dvs. er en process/tråd i gang med at udføre update, så bliver øvrige forsøg på update/select mv. placeret i en kø. Jeg kan derfor ikke se behovet for synkronisering...er der et?
Avatar billede martin.jensen Nybegynder
08. september 2003 - 14:01 #1
Der vil altid være behov for at synkronisere adgang til en database, det er derfor man anvender en database-server. MySql er i sig selv en databaseserver og sørger derfor for at opdateringerne sker korrekt.
Avatar billede arne_v Ekspert
08. september 2003 - 14:02 #2
Hvis du laver simple INSERT/UPDATE: nej.

Hvis du laver mere komplekse opdateringer: sandsyneligvis ikke.

Det er dog ikke svært at finde eksempler hvor det er nødvendigt, men
hvis man tænker sig lidt om med den måde man acceser databasen på,
så er det ikke nødvendigt fordi databasen selv ordner det.
Avatar billede forgalt Nybegynder
08. september 2003 - 14:06 #3
Okay...jeg uddyber lige lidt:
En klient kalder en metode på en server, der har en MySQL DB liggende. Serveren tilbyder metoden opdaterDatabase(string sqlStreng) der connecter til databasen, og foretager eksekverer den medsendte sql streng op mod databasen. Er der et behov for at foretage synkronisering af denne metode? Jeg er fuldstændig enig med dig i at der er et synkroniserings behov, men som jeg ser det klarer databasen dette problem. Som applikationsprogrammør behøver jeg ikke tænke på om der er 10 klienter der bruger denne metode
Avatar billede forgalt Nybegynder
08. september 2003 - 14:07 #4
Arne_V kan du komme med et eksempel på hvor synkronisering er nødvendig
Avatar billede arne_v Ekspert
08. september 2003 - 14:12 #5
Det lyder som det er en enkelt SQL kommando som du sender over.

Så behøver du ikke synkronisere af hensyn til databasen.

Kun hvis der er andre årsager til det (variable som bruges af flere tråde).
Avatar billede arne_v Ekspert
08. september 2003 - 14:14 #6
Den klassiske er jo (pseudo kode):

int n = SELECT MAX(id) FROM tabel

INSERT INTO tabel (id,navn) VALUES(n+1, 'et eller andet')
Avatar billede Slettet bruger
08. september 2003 - 14:14 #7
Når du bruger transaktionsbeskyttelse ved inserts/updates får du den synkronisering du har brug for.
Transaktionsbeskyttelse vil sørge for at din tabel/database er låst sålænge du opdaterer, og sætte de øvrige klienter i kø indtil din opdatering er færdig.
Avatar billede forgalt Nybegynder
08. september 2003 - 14:15 #8
det er der ikke. Og ja jeg medsender en sql kommando til en applikationsserver, der igen har forbindelse til en webserver med MySQL databasen. Jeg var selv kommet frem til at pga databasens locking mekanisme er der ikke noget synkroniseringsbehov....ville bare gerne lige bekræftes :)
Avatar billede arne_v Ekspert
08. september 2003 - 14:16 #9
Der er man nødt til at synkronisere de to SQL sætninger ellers går
det galt i en fler bruger kontekst.

Det er også meget dårlig database programmering og bør laves
på en anden måde.

Men det er både ofte set og illustrativt for problem-stillingen.
Avatar billede forgalt Nybegynder
08. september 2003 - 14:18 #10
arne_v => og det problem der så kan opstå med ovenstående pseudo kode er at du ikke når at indsætte den ny post i databasen før en anden klient har gjort dette, og dermed er din primærnøgle ugyldig?
Avatar billede forgalt Nybegynder
08. september 2003 - 14:21 #11
var dit sidste svar mht. min database tilgang eller var det knyttet til din pseudokode?
Avatar billede arne_v Ekspert
08. september 2003 - 14:22 #12
Ja. Eller den anden klient når at lave SELECT MAX, man laver INSERT og
den anden klient har en duplikat id.

Man kan også konstruere andre ikke helt så dumme eksempler
med problemet.
Avatar billede forgalt Nybegynder
08. september 2003 - 14:23 #13
takker for hjælpen......
Avatar billede arne_v Ekspert
08. september 2003 - 14:23 #14
Min 14:16:09 kommentar referer til min pseudo-kode.
Avatar billede forgalt Nybegynder
08. september 2003 - 14:24 #15
Det fandt jeg ud af.....jeg er vist ved at være kulleret i hovedet. Måske jeg skulle holde en lille pause :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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