MyIsam vs InnoDB

Status
Niet open voor verdere reacties.

djemmers

Gebruiker
Lid geworden
7 jul 2006
Berichten
129
Hallo

Ik ben een nieuwe DB voor mijn events website aan het ontwerpen met volgende tabellen:

Events
Category
Owners
Countries
Regions
Subregions

Ik wil de mogelijkheid om een fulltext search te doen op een paar textvelden in Events.
Code:
CREATE FULLTEXT INDEX `idx_Title` ON `Tournaments` (`Title` ASC) ;
Maar dat betekent een MyIsam tabel gebruiken.
Deze gebruikt table locking ipv row locks.

En aangezien iedereen die op mijn website surft continu SELECT's uitvoert op Events is dat op termijn niet zo een goed idee lijkt mij.

ook had ik graag wat foreign keys gebruikt:
ADD CONSTRAINT `fk_Tournaments_Category1` FOREIGN KEY (`Category_idCategories`) REFERENCES `Category` (`idCategories`) ON DELETE NO ACTION ON UPDATE NO ACTION,

Maar dat kan niet in een Myisam DB heb ik gelezen.

Hoe los ik dit op ?
 
Een echte oplossing is er niet. Wel wordt er op internet nog de suggestie gegeven om 2 tabellen te gebruiken, ééntje met InnoDB engine en ééntje met MyISAM. Deze worden dan periodiek via een script of via triggers gesynchroniseerd. De InnoDB gebruik je als basis en de MyISAM voor het zoeken. Persoonlijk vind ik dit een beetje een lapmiddel, maar als dit voor jou een optie is kun je het altijd proberen ;).

Als je dit niet wilt zul je een keuze moeten maken op basis van de voor- en nadelen. Naast de 3 verschillen die je zelf al noemt (foreign keys, fulltext index en row/table locking) is er nog iets van belang bij het maken van de afweging. InnoDB is per query langzamer als MyISAM, maar dat merk je pas bij grote aantallen rijen in de tabellen. Verder is de server (hardware) van belang, hoe beter de server hoe sneller de query's verwerkt worden. Doordat MyISAM de tabel locked moet de server wel snel genoeg zijn alle verzoeken achter elkaar af te handelen. Als dat niet zo is kan InnoDB door het tegelijk afhandelen van de verzoeken soms sneller zijn dan MyISAM. Echter, in de meeste gevallen is dat niet zo en is dit geen reden om InnoDB te gebruiken.

Als laatste nog een vraag, is MySQL een vereiste? Zo nee, is postgresql misschien een optie? Heb ik zelf geen ervaring mee, maar daar hoef je dergelijke keuzes in ieder geval niet te maken. Postgresql ondersteund de gebruikelijke database functionaliteiten gewoon.

Geen eenduidig antwoord dus, maar hopelijk wel een beetje extra informatie om een goede afweging te maken. En mocht je nog iets willen weten, vraag het gerust.
 
bedankt voor je reactie.

Maar nu zie ik het bos helemaal niet meer door de bomen :confused:
Ik denk dat if fulltext search maar ga laten vallen en een eenvoudige searchengine maken adhv "LIKE".
Daardoor wordt het dus InnoDB.
InnoDB select zou trager zijn dan MyISAM bij grote DB ?
over hoe groot spreken we dan? hoeveel records?
 
Het is ook geen eenvoudige vraag die je stelt, maar uit je eerste bericht maak ik op dat je je er al aardig in verdiept hebt. Wat betreft tragere query's moet je dan wel denken aan een miljoen records. Maar dan komt meteen het punt om de hoek kijken dat je op een InnoDB tabel meerdere query's tegelijk kunt uitvoeren, dus of je daar in de praktijk iets van merkt is maar de vraag. Mijn persoonlijke voorkeur gaat ook uit naar InnoDB, dus ik zou zeggen: goede keus :p
 
OK

Ik ga dus voor InnoDB
Als ik aan miljoenen records zit zou dat een onverhoopt succes zijn :-)
Dus daar maak ik me geen zorgen over

bedankt voor de input

ps ik onderzoek/lees meestal veel over een onderwerp voor ik post op een forum en het forum geeft dan meestal een bevestiging van mijn keuze, of ik denk daardoor gewoon nog eens goed na en weet wat ik moet doen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan