04. oktober 2005 - 14:13Der er
15 kommentarer og 1 løsning
Antal tabeller i en MySQL database
Hej.
Er der nogen limit på, hvor mange tabeller man kan oprette i en database? Har i tankerne at lave 2000+ tabeller.
Hvordan vil det være? Vil det være utrolig tungt at bruge? Har pt. en tabel, som indeholder 25.000.000 rækker og det er denne jeg gerne vil splitte ud på flere tabeller, da den er umulig at arbejde med.
Det er svært at indexere den store tabel da alle felter bruges i hver forespørgelse til den (hvilket sker ca. 300 gange i sekundet) Men det er gjort så godt som muligt. Masser af esktra kode arbejde er jeg uenig i.
phpMyAdmin kan ikke læse efter jeg har lavet 2000+ tabeller i mit testmiljø. Men jeg kan godt lave en læsning med et php-script og finde alle tabellerne.
Vi har styr på alle disse ting. Ved ikke hvor store systemer du normalt arbejder med, men vi er på et punkt, hvor den nuværende løsning med en tabel ikke længere kan bruges. Hvor vidt vi skal bruge løsningen med en tabel pr. type er så en anden ting :) Nu og her skulle jeg blot vide om det kan lade sig gøre og om det er forsvarligt at våge sig ud i det.
arbejdsmæssigt: betydeligt større systemer, men det er ikke på MySQL
jeg synes dog slet ikke at 25 millioner rækker lyder slemt
hvis man læser nogle af MySQL success historierne så opererer de med hundredevis af GB og milliarder af rækker - de fortæller ikke om max. antal rækker per tabel, men hvis man har 2 milliarder rækker så har man sikkert også en enkelt tabel med mere end 25 millioner rækker (Cox indsætter 2 millioner rækker i timen !)
men OK - der kan være specielle forhold for jer
men generelt tror jeg ikke at en opslitning af en tabel i flere tabeller vil forbedre performance
om I falder ind i "generelt" kategorien kan kun I afgøre (ihvertfald på de foreliggende oplysninger)
replikering og failover har vi. Dette holder jo bare ikke hvis begge ryger samtidigt. Hvorfor de går i stykker arbejder vi på at fejlsøge, det kan dog være svært at finde jo :(
så: - det må så være en mysql fejl ikke en hardware eller styresystem eller app fejl - det hjælper naturligvis ikke at replikere - fejl må kunne genskabes ved at restore en dump og apply'e en binlog på et test system => mysql bør kunne finde den (forudsat at I betaler for support)
er jeres data struktureret således at I f.eks. kunne splitte i 2 tabeller: idag (write & read) ældre (read only) ?
hvis I er langt fra performance limit kunne I prøve med InnoDB (men det koster altså i performance)
De ryger ikke begge samtidigt. MySQL fejl er jeg enig i. Fejl kan nok genskabes ja. Pt. er der igen splitning på tabellen.
Vi har kun oplevet den er røget 2 gange. Den ene gang var det selvforskyldt da vi var nødt til at kværke en server. Anden gang røg en masse tabeller samtidigt meget pludseligt. Vi havde netop opdateret til MySQL 4.1.16 fra 4.0.? Man kunne forestille sig dette har skabt problemerne for os. Jeg har ikke set problemer siden vi fik den repereret sidst.
Vi har en mistanke om, at et cron job er gået skævt eller lign. Vi har nemlig et cron som ryder op i en del tabeller og man kunne forestille sig Apache på et tidspunkt har givet op, fordi MySQL har knoklet og knoklet. Herefter har Apache lukket ned for forbindelsen, mens MySQL fortsat har knoklet på. Dvs. tråden aldrig er blevet lukket.
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.