Wie kann MySQL die Reaktionsgeschwindigkeit verbessern?
MySQL hat seine eigenen Einschränkungen. Viele Websites haben die klassische Architektur von MySQL+Memcached übernommen, und einige haben sogar MySQL aufgegeben und NoSQL-Produkte übernommen. Es ist unbestreitbar, dass viele NoSQL-Produkte bei einigen einfachen Abfragen (insbesondere PK-Abfragen) viel schneller sind als MySQL.
1. Überblick
2. Anwendungsszenarien
MySQL hat seine eigenen Einschränkungen. Viele Websites haben die klassische Architektur von MySQL+Memcached übernommen, und einige haben sogar MySQL aufgegeben und NoSQL-Produkte wie Redis übernommen / MongoDB usw. Es ist unbestreitbar, dass viele NoSQL-Produkte bei einigen einfachen Abfragen (insbesondere PK-Abfragen) viel schneller sind als MySQL und mehr als 80 % der Abfragen auf der Front-End-Website einfache Abfragedienste sind.
MySQL bietet eine API-Zugriffsschnittstelle über das HandlerSocket-Plug-in. In unserem Benchmark-Test erreichte die normale R510-Server-Einzelinstanz 72 W+QPS (reines Lesen), wenn eine leistungsstärkere CPU verwendet wird, um weitere Netzwerkkarten hinzuzufügen. Theoretisch können höhere Leistungen erzielt werden. Unter den gleichen Bedingungen hat Memcached nur 40 W+QPS (reines Lesen) und eine einzelne Instanz von Memcached auf R510 kann die Leistung nicht verbessern, da Memcached eine große Speichersperre hat, die seine Parallelitätsfähigkeiten einschränkt.
Innodb-Engine, Suche nach Primärschlüssel, eindeutigem Schlüssel oder Index (d. h. ihre SQL-Bedingung muss diese sein), unterstützt Limit-Anweisung, IN, INSERT/UPDATE/DELETE.
Eine Suche ohne Primärschlüssel, eindeutigen Schlüssel oder Index funktioniert nicht!
Die Tabelle muss eine Innodb-Engine sein
Die Hauptverwendungsszenarien von HandlerSocket und NoSQL sind unterschiedlich. HandlerSocket wird hauptsächlich zur Verbesserung von MySQL, zur Optimierung von Vorgängen wie Tabellenergänzungen, Löschungen, Änderungen und Änderungen der Tabellenstruktur verwendet und unterstützt intensive CPU-Vorgänge, während NoSQL als Cache-Funktion intensive E/A-Vorgänge unterstützt.
Daher können beides bei Bedarf kombiniert werden, um zusammenzuarbeiten.
3. Prinzip
HandlerSocket ist ein Plug-in für MySQL, das in den mysqld-Prozess integriert ist. Komplexe Abfragen und andere Vorgänge, die NoSQL nicht implementieren kann, werden weiterhin mithilfe der MySQL-eigenen relationalen Datenbank implementiert. Auf der Betriebs- und Wartungsebene spielt die weit verbreitete Erfahrung der MySQL-Master-Slave-Replikation weiterhin eine Rolle. Im Vergleich zu anderen NoSQL-Produkten ist die Datensicherheit wie in der Abbildung dargestellt:
Es Es ist ersichtlich, dass HandlerSocket MySQLs SQL umgeht. Die Analyseschicht (SQL-Schicht) greift direkt auf die MySQL-Speicherschicht zu. Darüber hinaus nutzt HandlerSocket die Netzwerkarchitektur Epoll und Worker-Thread/Thread-Pooling, um eine höhere Leistung zu erzielen.
Die Architektur von MySQL ist die Trennung von „Datenbankverwaltung“ und „Datenverwaltung“, also dem MySQL Server+Storage Engine-Modell. MySQL Server ist eine Ebene, die direkt mit dem Client interagiert. Er ist für die Verwaltung von Verbindungsthreads, das Parsen von SQL zur Generierung von Ausführungsplänen, die Verwaltung und Implementierung von Ansichten, Triggern, gespeicherten Prozeduren und anderen Dingen verantwortlich, die nichts mit der Verwaltung spezifischer Datenvorgänge zu tun haben. Es ermöglicht die Speicherung durch Aufrufen der Handler-API. Die Engine arbeitet mit bestimmten Daten. Storage Engine implementiert die Funktionen der Handler-API durch Vererbung und ist für die direkte Interaktion mit Daten, die Datenzugriffsimplementierung (muss implementiert werden), die Transaktionsimplementierung (optional), die Indeximplementierung (optional) und die Datencache-Implementierung (optional) verantwortlich.
HandlerSocket ist eine interne Komponente von MySQL. Es stellt NoSQL-ähnliche Netzwerkdienste in Form eines MySQL-Daemon-Plugins bereit. Es überwacht nicht direkt einen konfigurierten Port und empfängt Daten über NoSQL/API. Kommunikationsprotokoll und ruft dann die Speicher-Engine (z. B. InnoDB) auf, um Daten über die Handler-API in MySQL zu verarbeiten. Theoretisch kann HanderSocket verschiedene MySQL-Speicher-Engines verarbeiten. Bei der Verwendung von MyISAM können die eingefügten Daten jedoch nicht gefunden werden, da beim Erstellen der Zeile kein Problem auftritt Es kann weiterhin unterstützt werden, aber um den Speicher besser zu nutzen, wird HandlerSocket mit der InnoDB-Speicher-Engine verwendet.
Wie aus der obigen Abbildung ersichtlich ist, dient HandlerSocket als mittlere Schicht zwischen MySQL-Client und MySQL und ersetzt einen Teil der nativen Daten- und Tabellenverarbeitungsarbeit von MySQL. Dabei wird ein Multithread-Ansatz verwendet, um zwischen DDL- und DML-Vorgängen zu unterscheiden . Ziel ist es sicherzustellen, dass komplexe Bearbeitungen effizient abgewickelt werden können.
Da HandlerSocket in Form eines MySQL-Daemon-Plugins vorliegt, kann MySQL als NoSQL in Anwendungen verwendet werden. Seine größte Funktion besteht darin, die Interaktion mit Speicher-Engines wie InnoDB ohne SQL-Initialisierungsaufwand zu ermöglichen. Wenn Sie auf MySQLs TABLE zugreifen, müssen Sie natürlich auch die Tabelle öffnen/schließen, aber die Tabelle wird nicht jedes Mal geöffnet/geschlossen, da der zuvor aufgerufene Tabellencache zur Wiederverwendung gespeichert wird, während das Öffnen/Schließen von Tabellen am häufigsten ist Dies ist ressourcenintensiv und kann leicht zu Konflikten um den Mutex führen. Dies ist sehr effektiv bei der Verbesserung der Leistung. Wenn der Datenverkehr kleiner wird, schließt HandlerSocket Tabellen, sodass DDL im Allgemeinen nicht blockiert wird.
Was ist der Unterschied zwischen HandlerSocket und MySQL+Memcached? Beim Vergleich von Abbildung 1-2 und Abbildung 1-3 können wir die Unterschiede erkennen. Abbildung 1-3 zeigt eine typische MySQL+Memecached-Anwendungsarchitektur. Da der Get-Vorgang von Memcached viel schneller ist als die Primärschlüsselabfrage von MySQL im Speicher oder auf der Festplatte, wird Memcached zum Zwischenspeichern von Datenbankdatensätzen verwendet. Wenn die Abfragegeschwindigkeit und Antwortzeit von HandlerSocket mit Memcached vergleichbar sind, können wir in Betracht ziehen, die Architekturschicht der Cache-Datensätze von Memcached zu ersetzen. 4. Vorteile und Nachteile
Vorteile und Funktionen von HandlerSocket LIMIT-Klausel, das heißt, sie unterstützt die vollständigen Funktionen des Hinzufügens, Löschens, Änderns und Abfragens, unterstützt jedoch noch keine Vorgänge, die keinen Index verwenden können. Darüber hinaus wird die Funktion „execute_multi()“ unterstützt, um mehrere Abfrageanforderungen gleichzeitig über das Netzwerk zu übertragen, wodurch Netzwerkübertragungszeit gespart wird.
- Client-Anforderungen gruppieren: Wenn eine große Anzahl gleichzeitiger Anforderungen bei HandlerSocket eintrifft, aggregiert jeder Arbeitsthread so viele Anforderungen wie möglich, führt dann die aggregierten Anforderungen aus und gibt die Ergebnisse gleichzeitig zurück. Auf diese Weise wird die Leistung erheblich verbessert, indem ein wenig Reaktionszeit geopfert wird. Sie können beispielsweise die Anzahl der fsync()-Aufrufe reduzieren und die Kopierlatenz reduzieren.
- 4) Kein doppeltes CachingBei Verwendung von Memcached zum Zwischenspeichern von MySQL/InnoDB-Datensätzen werden diese Datensätze sowohl im Memcached- als auch im InnoDB-Pufferpool zwischengespeichert, sodass die Effizienz sehr gering ist (tatsächlich gibt es zwei Kopien der Daten und Memcached selbst ist möglicherweise auch HA-Unterstützung erforderlich), und es wird das HandlerSocket-Plug-in verwendet, das direkt auf die InnoDB-Speicher-Engine zugreift und Datensätze im InnoDB-Pufferpool zwischengespeichert werden, sodass andere SQL-Anweisungen die zwischengespeicherten Daten wiederverwenden können.
- 5) Keine DateninkonsistenzDa Daten im Gegensatz zur Verwendung von Memcached nur an einem Ort gespeichert werden (im Cache der InnoDB-Speicher-Engine), muss die Datenkonsistenz zwischen Memcached und MySQL gewahrt bleiben.
Die HandlerSocket-API ist nicht mit der Memcached-API kompatibel. Obwohl sie einfach zu verwenden ist, erfordert sie dennoch ein wenig Lernerfahrung, um zu lernen, wie man mit HandlerSocket interagiert. Wir können es jedoch in die HandlerSocket-API übersetzen, indem wir die Memecached-Funktion überladen.
2) Keine Sicherheitsfunktionen
Ähnlich wie andere NoSQL-Datenbanken unterstützt HandlerSocket keine Sicherheitsfunktionen. Der Arbeitsthread von HandlerSocket wird mit Systembenutzerberechtigungen ausgeführt, sodass die Anwendung über das HandlerSocket-Protokoll auf alle Tabellenobjekte zugreifen kann, dies ist jedoch möglich Ändern Sie einfach das Protokoll, fügen Sie ein Konfigurationselement als Kennwort in my.cnf hinzu und übergeben Sie die Kennwortüberprüfung dieser Konfiguration beim Herstellen einer Verbindung. Natürlich können die Datenpakete auch durch die Netzwerk-Firewall gefiltert werden.
3) Es gibt keinen Vorteil für Festplatten-IO-intensive Szenarien
Für IO-intensive Anwendungsszenarien kann die Datenbank nicht Tausende von Abfragen pro Sekunde ausführen, normalerweise nur 1-10 % CPU-Auslastung, in diesem Fall SQL-Analyse Dies wird nicht der Fall sein Ein Leistungsengpass, daher bietet die Verwendung von HandlerSocket keinen Vorteil. HandlerSocket sollte nur auf Servern verwendet werden, auf denen die Daten vollständig in den Speicher geladen werden. Bei PCI-E-SSD-Geräten (z. B. Fusion-IO), die mehr als 4 W IOPS pro Sekunde bereitstellen können und das IO-Gerät selbst viel CPU verbraucht, bietet die Verwendung von HandlerSocket jedoch immer noch Vorteile.
5. Installation
Hinweis: Die Installationsmethode im Buch ist veraltet und die Version ist relativ niedrig. Es wird empfohlen, die offizielle Dokumentation für die Installation zu verwenden. github.com/DeNA/HandlerSocket- Plugin-for-MySQL
Installationsdokumentation: https://github.com/DeNA/HandlerSocket-Plugin-for-MySQL/blob/master/docs-en/installation.en.txt
Quellcode herunterladen: Sie können Github direkt verwenden. Sie können Git auch klonen oder herunterladen. Installationsschritte:
1. Handlersocket erstellen. mysql-bindir: Verzeichnis der ausführbaren MySQL-Binärdatei (Das Verzeichnis, in dem sich mysql_config befindet)
with-mysql-plugindir: MySQL-Plug-in-Verzeichnis
2. Kompilieren- 3. Konfiguration
- HandleSocket kann nach der Kompilierung nicht verwendet werden , und Sie müssen es zur MySQL-Konfigurationsdatei (my.cnf) hinzufügen. Die folgende Konfiguration:
- Die hier hinzugefügten dienen hauptsächlich der Konfiguration von HandleSocket. Es verfügt über zwei Ports, 9998 zum Lesen von Daten und 9999 zum Schreiben von Daten . Das Lesen bis 9998 ist jedoch effizienter. Hier ist die Anzahl der Threads zum Lesen und Schreiben auf 16 festgelegt. Um mehr gleichzeitige Verbindungen zu verarbeiten, stellen Sie außerdem die Anzahl der offenen Dateideskriptoren auf 65535 ein Die Konfigurationsoption innodb_buffer_pool_size von InnoDB oder key_buffy_size von MyISAM bezieht sich auf den Cache-Index. Stellen Sie ihn daher so groß wie möglich ein, damit er genutzt werden kann Das Potenzial von HandleSocket.
./autogen.sh ./configure --with-mysql-source=/work/mysql-5.1.50 --with-mysql-bindir=/work/mysql-5.1.50-linux-x86_64-glibc23/bin --with-mysql-plugindir=/work/mysql-5.1.50-linux-x86_64-glibc23/lib/plugin
make && make install
[mysqld] # 绑定读请求端口 loose_handlersocket_port = 9998 # 绑定写请求端口 loose_handlersocket_port_wr = 9999 # 读请求线程数 loose_handlersocket_threads = 16 # 写请求线程数 loose_handlersocket_threads_wr = 16 # 设置最大接收连接数 open_files_limit = 65535
PHP-Nutzung:
Auswählen
mysql> install plugin handlersocket soname 'handlersocket.so';
Update
<?php $c = new \HSPHP\ReadSocket(); $c->connect(); $id = $c->getIndexId('data_base_name', 'table_name', '', 'id,name,some,thing,more'); $c->select($id, '=', array(42)); // SELECT WITH PRIMARY KEY $response = $c->readResponse(); //SELECT with IN statement $c = new \HSPHP\ReadSocket(); $c->connect(); $id = $c->getIndexId('data_base_name', 'table_name', '', 'id,name,some,thing,more'); $c->select($id, '=', array(0), 0, 0, array(1,42,3)); $response = $c->readResponse();
Löschen
<?php $c = new \HSPHP\WriteSocket(); $c->connect('localhost',9999); $id = $c->getIndexId('data_base_name','table_name','','k,v'); $c->update($id,'=',array(100500),array(100500,42)); // Update row(k,v) with id 100500 to k = 100500, v = 42 $response = $c->readResponse(); // Has 1 if OK $c = new \HSPHP\WriteSocket(); $c->connect('localhost',9999); $id = $c->getIndexId('data_base_name','table_name','','k,v'); $c->update($id,'=',array(100500),array(100500,42), 2, 0, array(100501, 100502)); // Update rows where k IN (100501, 100502) $response = $c->readResponse(); // Has 1 if OK
Einfügen
<?php $c = new \HSPHP\WriteSocket(); $c->connect('localhost',9999); $id = $c->getIndexId('data_base_name','table_name','','k,v'); $c->delete($id,'=',array(100500)); $response = $c->readResponse(); //return 1 if OK
Verwandte Empfehlungen: „
MySQL-Tutorial“
Das obige ist der detaillierte Inhalt vonWie kann MySQL die Reaktionsgeschwindigkeit verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die volle Tabellenscannung kann in MySQL schneller sein als die Verwendung von Indizes. Zu den spezifischen Fällen gehören: 1) das Datenvolumen ist gering; 2) Wenn die Abfrage eine große Datenmenge zurückgibt; 3) wenn die Indexspalte nicht sehr selektiv ist; 4) Wenn die komplexe Abfrage. Durch Analyse von Abfrageplänen, Optimierung von Indizes, Vermeidung von Überindex und regelmäßiger Wartung von Tabellen können Sie in praktischen Anwendungen die besten Auswahlmöglichkeiten treffen.

Die Volltext-Suchfunktionen von InnoDB sind sehr leistungsfähig, was die Effizienz der Datenbankabfrage und die Fähigkeit, große Mengen von Textdaten zu verarbeiten, erheblich verbessern kann. 1) InnoDB implementiert die Volltext-Suche durch invertierte Indexierung und unterstützt grundlegende und erweiterte Suchabfragen. 2) Verwenden Sie die Übereinstimmung und gegen Schlüsselwörter, um den Booleschen Modus und die Phrasesuche zu unterstützen. 3) Die Optimierungsmethoden umfassen die Verwendung der Word -Segmentierungstechnologie, die regelmäßige Wiederaufbauung von Indizes und die Anpassung der Cache -Größe, um die Leistung und Genauigkeit zu verbessern.

Ja, MySQL kann unter Windows 7 installiert werden, und obwohl Microsoft Windows 7 nicht mehr unterstützt hat, ist MySQL dennoch kompatibel damit. Während des Installationsprozesses sollten jedoch folgende Punkte festgestellt werden: Laden Sie das MySQL -Installationsprogramm für Windows herunter. Wählen Sie die entsprechende Version von MySQL (Community oder Enterprise) aus. Wählen Sie während des Installationsprozesses das entsprechende Installationsverzeichnis und das Zeichen fest. Stellen Sie das Stammbenutzerkennwort ein und behalten Sie es ordnungsgemäß. Stellen Sie zum Testen eine Verbindung zur Datenbank her. Beachten Sie die Kompatibilitäts- und Sicherheitsprobleme unter Windows 7, und es wird empfohlen, auf ein unterstütztes Betriebssystem zu aktualisieren.

MySQL ist ein Open Source Relational Database Management System. 1) Datenbank und Tabellen erstellen: Verwenden Sie die Befehle erstellte und creatEtable. 2) Grundlegende Vorgänge: Einfügen, aktualisieren, löschen und auswählen. 3) Fortgeschrittene Operationen: Join-, Unterabfrage- und Transaktionsverarbeitung. 4) Debugging -Fähigkeiten: Syntax, Datentyp und Berechtigungen überprüfen. 5) Optimierungsvorschläge: Verwenden Sie Indizes, vermeiden Sie ausgewählt* und verwenden Sie Transaktionen.

Der Unterschied zwischen Clustered Index und nicht klusterer Index ist: 1. Clustered Index speichert Datenzeilen in der Indexstruktur, die für die Abfrage nach Primärschlüssel und Reichweite geeignet ist. 2. Der nicht klusterierte Index speichert Indexschlüsselwerte und -zeiger auf Datenzeilen und ist für nicht-primäre Schlüsselspaltenabfragen geeignet.

In der MySQL -Datenbank wird die Beziehung zwischen dem Benutzer und der Datenbank durch Berechtigungen und Tabellen definiert. Der Benutzer verfügt über einen Benutzernamen und ein Passwort, um auf die Datenbank zuzugreifen. Die Berechtigungen werden über den Zuschussbefehl erteilt, während die Tabelle durch den Befehl create table erstellt wird. Um eine Beziehung zwischen einem Benutzer und einer Datenbank herzustellen, müssen Sie eine Datenbank erstellen, einen Benutzer erstellen und dann Berechtigungen erfüllen.

MySQL und Mariadb können koexistieren, müssen jedoch mit Vorsicht konfiguriert werden. Der Schlüssel besteht darin, jeder Datenbank verschiedene Portnummern und Datenverzeichnisse zuzuordnen und Parameter wie Speicherzuweisung und Cache -Größe anzupassen. Verbindungspooling, Anwendungskonfiguration und Versionsunterschiede müssen ebenfalls berücksichtigt und sorgfältig getestet und geplant werden, um Fallstricke zu vermeiden. Das gleichzeitige Ausführen von zwei Datenbanken kann in Situationen, in denen die Ressourcen begrenzt sind, zu Leistungsproblemen führen.

MySQL unterstützt vier Indextypen: B-Tree, Hash, Volltext und räumlich. 1.B-Tree-Index ist für die gleichwertige Suche, eine Bereichsabfrage und die Sortierung geeignet. 2. Hash -Index ist für gleichwertige Suche geeignet, unterstützt jedoch keine Abfrage und Sortierung von Bereichs. 3. Die Volltextindex wird für die Volltext-Suche verwendet und ist für die Verarbeitung großer Mengen an Textdaten geeignet. 4. Der räumliche Index wird für die Abfrage für Geospatial -Daten verwendet und ist für GIS -Anwendungen geeignet.
