Kom ihåg mig?
Home Menu

Menu


Bästa alternativet för mySQL

Ämnesverktyg Visningsalternativ
Oläst 2007-07-10, 08:39 #1
Helix Helix är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Dec 2003
Inlägg: 2 829
Helix Helix är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Dec 2003
Inlägg: 2 829
Funderar lite vilket egentligen är bättre för prestandan. Skall ha en applikation där varje användare kan antingen få två tabeller i databasen eller så använder man två tabeller för att lagra all information för alla användare.

I vilket fall blir prestandan bättre i längden?

1. Det blir många tabeller i database och ökar med antalet användare.
2. Det finns få tabeller i databasen (ökar ej), som istället ökar i storlek tills tora mängder.

Någon som vet eller sett några tester som körts? Vilket är det mest optimala?
Helix är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-07-10, 08:56 #2
tydal tydal är inte uppkopplad
Medlem
 
Reg.datum: May 2005
Inlägg: 130
tydal tydal är inte uppkopplad
Medlem
 
Reg.datum: May 2005
Inlägg: 130
Om du funderar på fall 1 så låter det som att du inte ska använda en SQL-databas utan jobba direkt mot filsystemet.

Fall 2 är hur man normalt använder SQL-databaser.

I fall 1 har du ingen samordning. Du vet inte hur många användare du har. Du vet inte vilka användare som uppfyller vissa villkor. Du vet ingenting om några användare tillsammans, utan du vet bara något om var och en för sig, som en isolerad företeelse. Det är kanske så du vill ha det, men i så fall får du bäst prestanda utan en SQL-databas.
tydal är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-07-10, 09:14 #3
mbomelin mbomelin är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 248
mbomelin mbomelin är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 248
Det beror ju även på designen av tabellen tycker jag. Det blir kanske ohållbart i längden om du har en fet tabell med låt säga fulltext-index på 15 kolumner.
Det funkar upp till ett visst antal användare men är ganska ohållbart för ett par miljoner användare då indexen kommer bli så stora så de inte går att hålla i minnet, och att jobba med tempfiler på disk är dyyrt.
Det hela är egentligen en ekvation mellan
[edit]
(Katten kom åt enter-knappen)

...mellan antal användare, tabelldesign, indexdesign och vad du har för hårdvara.

Att ha en tabelluppsättning per användare är dock inget jag nånsin sett. Gör isåfall hellre en gemensam uppsättning per 1000 användare, genom att ha koll på vilka användare som finns var så kan du göra en query till rätt tabell, och vid sökningar i alla tabeller kan du använda en MERGE-tabell.
mbomelin är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-07-10, 12:30 #4
yoggi2k5 yoggi2k5 är inte uppkopplad
Nykomling
 
Reg.datum: Sep 2006
Inlägg: 30
yoggi2k5 yoggi2k5 är inte uppkopplad
Nykomling
 
Reg.datum: Sep 2006
Inlägg: 30
Funderade själv över detta för inte så länge sen. Hittade då detta när jag sökte efter svar:

http://bobfield.blogspot.com/2006/03...on-tables.html
http://forums.mysql.com/read.php?125...7451#msg-87451
http://forums.mysql.com/read.php?125...4239#msg-84239
http://forums.mysql.com/read.php?125...788#msg-111788

Allt pekade åt att jag skulle köra med en uppsättning tabeller, så jag gjorde ett litet test där jag körde lite SQL-frågor mot en databas med 1 miljon, 10 miljoner och 50 miljoner rader. Visade sig att med lite tweaks så fungerade det riktigt bra.
Mitt tips är att du sätter upp en uppsättning tabeller och kör ett par test frågor efter att du fyllt den med massa junk-data. Tar inte speciellt lång tid att genomföra och du får svar på om det fungerar eller inte.
yoggi2k5 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-07-12, 17:37 #5
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
Rent teoretiskt, tidskomplexiteten är O(log) vid sökning i en databas som är indexerad. Detta medför att det krävs 20 jämförelser för att söka upp ett värde när det är 1 miljon rader. När det är 25 miljoner rader så krävs det 25 jämförelser. Och för 1 miljard rader så krävs det 30 jämförelser. Som du ser så ökar inte antalet jämförelser särskilt mycket när datan växer. Detta är rent teoretiskt och det borde se ut någorlunda lika i verkligheten.

Ett problem som finns om indexdatan ligger på disk, då blir det höga söktider. Så det vore optimalt om indexfilen fick plats i minnet. Jag har en tabell på en site där antalet rader är 1,5 miljoner. Jag indexerar två stycken int-kolumner och storleken uppgår till knappt 28 kB.

Min poäng är alltså att om man har indexet i minnet och indexerar korrekt så gör det inte så mycket om det är en stor tabell. Jag är inte jätteinsatt i MySQL eller databaser i allmänhet rent praktiskt rörande prestanda på det här viset, så rätta gärna mig om jag har fel. Men tidskomplexiteten är i alla fall sådan rent teoretiskt. Det finns alltså en anledning till varför många faktiskt väljer att ha en tabell och inte flera tusen.
fors är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 05:35.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017