Fundering kring databasoptimering

PHPportalen Forum Index » Databaser
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
Peppe L-G



Medlem i: 4910 dagar
Från: Mullsjö
Status: Offline



#742776
Inlägg Skrivet: 2020-05-03 12:25      Ämne: Fundering kring databasoptimering Citera

Jag har aldrig satt mig in i hur databaser optimeras internt (vilket jag antar även skiljer sig från databas till databas), men jag har en fundering nu som jag gärna skulle vilka ha klargörande kring.

Ofta skickas ju samma frågor till databasen om och om igen, t.ex. "ge mig alla nyheter som har kategorin 'sport'". Jag gissar att databasen cachar detta resultat, så när den får samma fråga igen så skickas samma resultat som innan, men hur funkar det när någon gör en skrivning till databasen som ändrar resultatet av en sån här fråga? Uppdateras cachen direkt, eller markeras den bara som ogiltig, och nästa gång som frågan "ge mig alla nyheter som har kategorin 'sport'" kommer till databasen så kommer databasen då bemöda sig med att hitta alla sportnyheter från scratch?

Jag förställer mig att vid en write så kan man "finjustera" cachade read-frågor med väldigt lite beräkningskraft för att få dem up-to-date, dock med mycket logik den programmerare som den som implementerade databasen behöver skriva. Har den mödan lagts ner? Eller blir vinningen inte så stor på att göra det?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
harald_b
Moderator



Medlem i: 5168 dagar
Från: Tavesta
Status: Offline



#742777
Inlägg Skrivet: 2020-05-04 22:55      Ämne: Citera

Jag har en ganska "tung" databasfråga som jag ibland kör ett antal gånger på raken. Första gången tar alltid lång tid, men de efterföljande går fort. Men så fort någon tabell som ingår i databasfrågan uppdateras tar det återigen lika lång tid som första gången databasfrågan kördes.
Jag gissar att den cachade frågan helt enkelt raderas när något data den är beroende av uppdateras.

I mitt fall är databasen maria_db / mysql.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Peppe L-G



Medlem i: 4910 dagar
Från: Mullsjö
Status: Offline



#742778
Inlägg Skrivet: 2020-05-06 20:29      Ämne: Citera

Det där besvarar ju min fråga. Följdfrågan blir ju så klart varför man inte finjusterar cache-frågorna vid write Smile Teorier? För svårt? Onödigt arbete utifall samma fråga inte kommer igen?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
harald_b
Moderator



Medlem i: 5168 dagar
Från: Tavesta
Status: Offline



#742779
Inlägg Skrivet: 2020-05-07 11:50      Ämne: Citera

Jag vet inte om sådant inte förekommer. Men jag antar att det kan vara rätt komplicerat att räkna ut vilka cachade databasfrågor som kan vara lönsamma att räkna om på förhand.
Om du har mycket skrivningar till en ofta använd tabell kanske det skulle kunna gå att ha en separat tabell för nytt data, som sammanförs med huvudtabellen först när den uppnått en viss storlek?
Många databasfrågor kanske inte måste ha med det allra senaste?
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Emerald



Medlem i: 5308 dagar

Status: Offline



#742780
Inlägg Skrivet: 2020-05-08 00:18      Ämne: Citera

Jag har haft liknande problem med många och stora databasförfrågningar/skrivningar per anrop. Min lösning blev till slut att en ajax-variant där förändringar med jämna mellanrum laddas upp till en separat databas. Sedan har jag ett cron-job som körs mot den var 5e minut tror jag det är. Den hämtar in ändringarna i lagom stora portioner och behandlar den, för att därefter skriva allt snyggt och prydigt till den ordinarie databasen.

Enda nackdelen är att ändringar normalt kan ta 5-15 minuter att synas, men i mitt fall är det inget problem. Jag har haft detta i 4-5 års tid nu och det har aldrig krånglat för mig.

Om min lösning är att rekommendera? Ingen aning. Det var inget jag hittat någon information om någon annanstans. Jag såg ett problem... och skapade en fungerande lösning.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Peppe L-G



Medlem i: 4910 dagar
Från: Mullsjö
Status: Offline



#742781
Inlägg Skrivet: 2020-05-11 15:34      Ämne: Citera

harald_b skrev:
Men jag antar att det kan vara rätt komplicerat att räkna ut vilka cachade databasfrågor som kan vara lönsamma att räkna om på förhand.

Nah, borde inte alla cachade SELECT-frågor vara billigare att fin-uppdatera vid varje write istället för att markera dem som dirty och köra om dem från scratch nästa gång någon faktiskt skickar frågan? Enda förlusten blir väl ifall man uppdaterar en fråga som aldrig efterfrågas igen, men håller man räkningen på hur ofta man får en fråga så borde man ju enkelt kunna identifiera dem som är återkommande.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
harald_b
Moderator



Medlem i: 5168 dagar
Från: Tavesta
Status: Offline



#742782
Inlägg Skrivet: 2020-05-11 22:33      Ämne: Citera

Om det skulle komma många skrivningar till databasen, utan att något läses, så kan det bli väldigt dyrt att uppdatera alla cachade frågor vid varje skrivning.
Om ingen cachad SELECT-fråga markeras som dirty blir det ju också ganska många databasfrågor att uppdatera vid varje skrivning, med tiden.
En väl optimerad databas skall ju prestera bra både vid skrivning och läsning.
Jag tror i alla fall att det blir en rätt komplicerad uppgift att göra den här typen av optimering.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Databaser
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic