Avatar billede Slettet bruger
04. august 2005 - 21:17 Der er 16 kommentarer og
1 løsning

Finde ud af om writes konflikter med reads

Hej,

Er der nogle der har erfaring med, eller kender metoder til, at afgøre on writes (INSERT, UPDATE etc.) konflikter med reads (SELECT..).

Altså kigge på 2 query's og afgøre, om et kald til write vil ændre det, som read læser.

Jeg skal bruge dette i forbindelse med en undersøgelse om caching. Hvor jeg vil se på bl.a. mulighederne i ovenstående (til at invalidere objekter i cachen, der indeholder select's - der konflikter med en udført write).

Alle svar/kommentarer er meget velkomne.
Avatar billede Slettet bruger
04. august 2005 - 21:19 #1
a) Kan det lade sig gøre med analyse/parsing af SQL query'en alene?
b) Eller er det nødvendigt at foretage ekstra kald til databasen, for at kunne konstatere om de konflikter?

Har i nogle eksempler på a) og/eller b)?
Avatar billede arne_v Ekspert
04. august 2005 - 21:23 #2
Det kan jo åbenlyst ikke ses udfra SQL sætningerne alene.

SELECT * FROM t WHERE f1=1
UPDATE t SET f2=0 WHERE f3=0

man kan ikke vide om WHERE f1=1 og WHERE f3=0 overlapper uden at kigge på data.
Avatar billede arne_v Ekspert
04. august 2005 - 21:25 #3
Men din problem stilling "invalidate cache" er jo ret relevant så nogen
må have arbejdet med det

Jeg vil gætte på at man i forbindelse med UPDATE ikke checker i databasen
men checker i cachen for det der skal invalideres
Avatar billede Slettet bruger
04. august 2005 - 21:29 #4
"Jeg vil gætte på at man i forbindelse med UPDATE ikke checker i databasen
men checker i cachen for det der skal invalideres".

Ja, så skal cachen indeholde information om hvilke objekter, der er afhængige af netop den forespørgsel.
Avatar billede arne_v Ekspert
04. august 2005 - 21:36 #5
gør den ikke det per automatik

lad os sige at vi on disk har:

t
f1 f2 f3
0  0  0
1  1  2
2  1  4
3  1  6

i cache har vi

SELECT * FROM t WHERE f1=1
f1 f2 f3
1  1  2

SELECT * FROM t WHERE f1=2
f1 f2 f3
2  1  4

Vi skal udføre

UPDATE t SET f2=f2+1 WHERE f3=2

den udfører vi on disk

men vi checker cachen og ser at den første af de 2 cache entries skal smides
ud fordi UPDATE matcher den
Avatar billede Slettet bruger
04. august 2005 - 21:40 #6
Men hvordan ved vi at UPDATE matcher den?
Avatar billede arne_v Ekspert
04. august 2005 - 21:41 #7
SELECT * FROM t WHERE f1=1
f1 f2 f3
1  1  2

og

... WHERE f3=2
Avatar billede arne_v Ekspert
04. august 2005 - 21:43 #8
det kræver selvfølgelig lidt kode at se at den UPDATE matcher data

men det kan gøres

og husk på at det er nok kun at kunne klare de nemmeste WHERE betingelser, fordi
de vil udgøre en meget stor del af de faktisk queries og kan man ikke
gennemskue en query kan man falde tilbage til at invalidere alt
som er fra den tabel
Avatar billede Slettet bruger
04. august 2005 - 21:43 #9
Nu ser jeg, hvad du mener.
Avatar billede arne_v Ekspert
04. august 2005 - 21:44 #10
men jeg sidder bare og fabulerer

der må være skrevet noget om dette emne

og måske findes der meget smartere løsninger
Avatar billede arne_v Ekspert
03. september 2005 - 18:32 #11
OK ?
Avatar billede Slettet bruger
04. september 2005 - 00:21 #12
Selvfølgelig. Spilder du ikke dit talent?
Avatar billede arne_v Ekspert
04. september 2005 - 00:24 #13
ikke helt forstået ?
Avatar billede Slettet bruger
04. september 2005 - 00:27 #14
På alt den tid, du bruger her.
Avatar billede Slettet bruger
04. september 2005 - 00:28 #15
Det er bestemt ikke negativt ment, og tak fordi du mindede mig om det åbne spørgsmål, men det slog mig bare - da du jo nok har en rutine med at kigge åbne spørgsmål igennem osv.
Avatar billede arne_v Ekspert
04. september 2005 - 00:50 #16
tja måske - men jeg synes nu at det er sjovere end at sidde foran TV hele aftenen

en gang hver anden eller tredie uge løber jeg lige de uafsluttede spørgsmål jeg
deltager i igennem og ser om der er nogen som trænger til at blive afsluttet
Avatar billede Slettet bruger
04. september 2005 - 13:24 #17
Det kan jeg da godt forstå. 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