Ich habe eine einzelne Datenbank von ca. 4,5 GB auf einem Server mit 8 GB RAM. Die überwiegende Mehrheit der Tabellen besteht aus MyIsam (ungefähr 4,3 GB), aber ich werde bald einige von ihnen in InnoDB konvertieren . (Es wird ein langsamer Prozess, der sich zunächst auf die schreibintensivsten Tabellen konzentriert.)
Stimmt etwas nicht, wenn ein dedizierter Server ausgeführt wird, auf dem beide Arten von Speicher-Engines vorhanden sind?
mysql
innodb
myisam
storage-engine
Derek Downey
quelle
quelle
Is there anything wrong with running a dedicated server where both types of storage engines exist?
Vielleicht umformulierenMultiple types
?Antworten:
Es ist nichts Falsches daran , mehrere Speicher-Engines auf derselben physischen Maschine zu verwenden, solange Sie die Vor- und Nachteile der einzelnen Engines kennen. Es gibt Leistungsüberlegungen, Funktionseinschränkungen und Anwendungsfälle für alle Plugin-Speichertypen.
Wenn Sie beispielsweise eine kleine Tabelle haben, die zu 90% geschrieben wird, können Sie MyISAM auswählen. Wenn die Daten leicht wiederhergestellt werden können und es sich um eine kleine Tabelle handelt, beispielsweise zum Einreihen in die Warteschlange, können Sie Speicher auswählen. Wenn Sie eine Tabelle haben, die zu 90% gelesen wird, und die Daten dort sein müssen, wenn Sie danach suchen, wählen Sie wahrscheinlich eine Speicher-Engine, die Transaktionen und konfigurierbare Atomarität unterstützt, wie z. B. InnoDB. Wenn Sie über das Dateisystem auf Daten zugreifen möchten, ohne Daten zu beschädigen, wählen Sie möglicherweise CSV.
Sie können jedoch mehrere Speicher-Engines im selben Schema sowie den physischen Host sicher verwenden.
Lassen Sie mich jedoch bemerken, dass Ihre Puffer in diesem ganzen Durcheinander eine Rolle spielen. Wenn Sie sowohl MyISAM als auch InnoDB verwenden, müssen Sie darauf achten, dass Ihr key_buffer und Ihr innodb_buffer_pool nicht miteinander in Konflikt stehen. Dies erfordert von Ihrer Seite eine sorgfältige Planung, aber genau das tun wir.
quelle
Ich kann Ihnen nicht sagen, ob dies eine gängige Praxis ist. Ich kann über meine eigenen Erfahrungen berichten.
Ich benutze immer das beste Werkzeug für den Job, also mische ich die ganze Zeit Motoren. Die meisten meiner Projekte verwenden MyISAM als Standardmodul.
Wenn ich spezielle Funktionen benötige, die nur in InnoDB verfügbar sind, greife ich zu.
Wenn eine Tabelle größtenteils schreibgeschützt ist, wähle ich die Archivierungs-Engine, bevor ich blinken kann.
Da ich weiß, dass der Maschinenserver über genügend Arbeitsspeicher verfügt, werden alle meine temporären Daten in Heap-Tabellen gespeichert.
Ich habe in der Vergangenheit einige Verzögerungen beim Mischen von MyISAM und InnoDB gesehen, aber dies ist kein spezifisches MySQL-Problem. Es ist ein Designproblem, das nicht auftritt, wenn Sie nur einen Motor verwenden. Tatsächlich führt die Verwendung der falschen Engine zu einer stärkeren Verlangsamung, egal ob es sich nur um MyISAM, nur um InnoDB oder eine Mischung aus beiden handelt. Es ist schwierig, eine Formel zu definieren, um zu wissen, wann die Verlangsamung eintreten würde. Nur tatsächliche Tests könnten es Ihnen sagen.
Natürlich konnten Sie die Integrität und Konsistenz von InnoDB und MyISAM bei einer eindeutigen Abfrage nicht aufrechterhalten.
quelle
Ich versuche zu vermeiden, MyISAM- und InnoDB-Tabellen in derselben Datenbank zu mischen, aber dies dient eher der Vernunft als den praktischen Gründen. Ich finde es jedoch nützlich, eine Datenbank mit MyISAM-Tabellen für die Volltextsuche zu haben, damit ich diese auf Websites ausführen kann. Wenn Sie es in einer separaten Datenbank mit einem Fremdschlüssel für jeden Eintrag aufbewahren, können andere Entwickler, die an der Datenbank arbeiten, auf einfache Weise sehen, was los ist.
quelle