Erzählen Sie mir weiter, ich bin zu einem Vorstellungsgespräch nach Shanghai Meituan gefahren und hatte damals auch keine technischen Probleme Sagen Sie, es ist schlecht oder gut. Wie auch immer, es gab dem Interviewer einfach kein angenehmes Gefühl.
Es ist schlimm, es ist bei vielen Dingen das Gleiche. Normalerweise geht es mir gut, aber wenn es Zeit für das Vorstellungsgespräch ist, fällt mir nichts mehr ein.
Obwohl ich an Java开发快五年了(2017年),用过Oracle数据库(银行里的系统),但大多数时候都是使用MySQLDatenbanken arbeite, war ich immer noch verwirrt, als ich mit dieser Frage konfrontiert wurde (ich habe in den sauren Apfel gebissen und ein wenig geredet) Der Interviewer würde Fragen zu Indizierung, langsamen Abfragen, Leistungsoptimierung usw. stellen. usw. (Denn das sind alles Interviewfragen, die ich online gefunden und auswendig gelernt habe).
Heute werden wir überJava Entwickler, aber sie beschäftigen sich im täglichen Entwicklungsprozess häufig mit MySQL-Datenbanken. Wenn das Unternehmen );font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">DBA can viel machen, aber immer noch ein bisschen besser, wenn es kein DBA ist von Kein Nutzen, wir sind immer noch sehr Es ist notwendig zu verstehenMySQL的架构体系,尽管咱们是Java开发人员,但是在日常开发过程中也会经常和MySQL数据库打交道。如果公司有DBA能干点事还稍微好点,如果是没有DBA或者DBA没什么用的情况下,我们还是很有必要了解MySQL的整个体系的,况且在面试中遇到了也是一个加分项。
想要知道一条SQL是怎么查询的,只要对MySQL整个体系搞清楚了,才能说出个123。
所以于情于理,我们很有必要学习一下MySQL的架构体系的。
平时,我和小伙伴们聊天的时候,经常会把MySQL
🎜Ich möchte etwas wissenWie SQL abgefragt wird, nur MySQLNur wenn das gesamte System verstanden ist, können wir 123 sagen. 🎜
🎜🎜Es ist also notwendig, dass wir etwas über Emotionen und Vernunft lernenMySQLs Architektur. 🎜🎜Wenn ich mit meinen Freunden chatte, verwende ich normalerweise oft Was ist MySQL?
MySQL AB code>Von der Firma entwickelt, gehört es derzeit zu OracleCompany .
MySQL🎜MySQL</ code> unterstützt große Datenbanken und kann große Datenbanken mit mehreren zehn Millionen Datensätzen verarbeiten. </section></li>🎜🎜<code style=" font-size: rgba mono consolas monaco menlo monospace break-all rgb>MySQL Code>Verwendet die Standardform der SQL-Datensprache. 🎜🎜<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba( 27, 31, 35, 0.05);font-family: „Operator Mono“, Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);“>MySQL</ code> kann auf mehreren Systemen verwendet werden und unterstützt mehrere Sprachen, darunter C, C++, Python, Java, Ped, PHP, Eifel, Ruby und TCL usw. </section></li>🎜🎜<code style=" font-size: rgba mono consolas monaco menlo monospace break-all rgb>MySQL code> bietet gute Unterstützung für PHP, die derzeit beliebteste Webentwicklungssprache.<li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);"><code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: „Operator Mono“, Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);“>MySQL unterstützt große Datenbanken, Unterstützt ein Data Warehouse mit 50 Millionen Datensätzen. Die 32-Bit-Systemtabellendatei kann maximal 4 GB unterstützen, und das 64-Bit-System unterstützt eine maximale Tabellendatei von 8 TB. MySQL是可以定制的,采用了GPL协议,你可以修改源码来开发自己的MySQL系统。
请注意MySQL拼写,另外,很多人可能有疑问,为什么MySQL的logo是一条海豚?
下面我们就来看看MySQL的整体架构图。
MySQL架构图
再来看看我们开发的系统架构图:
其实还是蛮相似的,都有分层的概念。既然我们开发的软件系统能进行分层,那么MySQL
🎜🎜MySQLSystem. 🎜🎜
Bitte beachten SieMySQL Rechtschreibung, außerdem haben viele Leute möglicherweise Fragen, warum Werfen wir einen Blick daraufMySQL-Architekturdiagramm
Werfen wir einen Blick auf das von uns entwickelte Systemarchitekturdiagramm: 🎜
Eigentlich sind sie ziemlich ähnlich Konzept der Schichtung. Da das von uns entwickelte Softwaresystem geschichtet sein kann, gilt MySQL的分层情况以及每一层的功能。
Architekturdiagramm-LayeringWir können das obige Architekturdiagramm aufteilen und eine kurze Erklärung geben.
Verbindungsschicht
Mit Kunden Für den Umgang mit dem Terminal wurden oben die unterstützten Sprachen angegeben. Der Client-Link unterstützt viele Protokolle, zum Beispiel haben wir (27, 31, 35, 0.05);Schriftfamilie: „Operator Mono“, Consolas, Monaco, Menlo, Monospace;Wortumbruch: Break-All;Farbe: RGB (239, 112, 96);">Java In EntwicklungJDBC. Ist diese Ebene nicht ein bisschen wie die in unserem Projekt? : rgba(27, 31, 35, 0.05);font-family: „Operator Mono“, Consolas, Monaco, Menlo, monospace;word-break: break -all;color: rgb(239, 112, 96);"> Gateway-Schicht
? Wenn Sie mit Gateway nicht vertraut sind, können wir mich verstehenquery_cache_type ist eingestellt auf MySQL也提供了这种“按需使用”的方式。你可以将参数query_cache_type设置成DEMAND,这样对于默认的SQL语句都不使用查询缓存。
「注意」:MySQL 8.0
"Hinweis": ParserWenn der Abfragecache nicht erreicht wird, beginnt die eigentliche Ausführung der Anweisung. Zunächst muss MySQL wissen, was Sie tun möchten, also muss es die SQL-Anweisung analysieren. Der Analysator führt zunächst eine „lexikalische Analyse“ durch. Was Sie eingeben, ist eine SQL-Anweisung, die aus mehreren Zeichenfolgen und Leerzeichen besteht. MySQL muss identifizieren, was die darin enthaltenen Zeichenfolgen sind und was sie darstellen. 🎜
Nach Abschluss der lexikalischen Analyse müssen Sie eine „grammatikalische Analyse“ durchführen. Basierend auf den Ergebnissen der lexikalischen Analyse bestimmt der Syntaxanalysator anhand grammatikalischer Regeln, ob die von Ihnen eingegebene SQL-Anweisung der MySQL-Syntax entspricht.
Wenn wir bei der Schreibweise von SQL einen falschen Buchstaben vergessen oder schreiben, erhalten wir eine Fehlererinnerung mit „You have an error in your SQL syntax“.
Zum Beispiel im folgenden Fall:
Der Fehler besteht darin, dass im WHERE-Schlüsselwort ein E fehlt.
Ebenso nutzen wir SQL, wenn ein bestimmtes Feld nicht existiert.
Im Allgemeinen werden Grammatikfehler an der ersten Stelle angezeigt, an der der Fehler auftritt. Sie sollten daher auf den Inhalt achten, der unmittelbar nach „in der Nähe“ folgt. Dies dient nur als Referenz .
Das SQL wurde vom Analysator analysiert und es wurde kein Fehler gemeldet. Geben Sie dann zu diesem Zeitpunkt den Optimierer ein, um die SQL zu optimieren.
Optimierer
Der Optimierer wird hauptsächlich verwendet, um zu entscheiden, welcher Index verwendet werden soll, wenn unsere Datenbanktabelle mehrere Indizes enthält oder wenn eine Anweisung mehrere Tabellenzuordnungen (Joins) aufweist. Bestimmen Sie die Verknüpfungsreihenfolge jeder Tabelle.
Zum Beispiel:
SELECT a.id, b.id FROM t_user a join t_user_detail b WHERE a.id=b.user_id and a.user_name='田维常' and b.id=10001
Dadurch wird die bedingte Abfrage optimiert.
Nach Abschluss der Optimierungsverarbeitung wurde der SQL-Ausführungsplan festgelegt. Anschließend geht es weiter in den Antrieb.
Executor
Zunächst müssen Sie die Berechtigungen ermitteln, also ob Sie die Berechtigung haben, dieses SQL auszuführen. Bei einigen Clients können die Berechtigungen während der Arbeit kontrolliert werden.
Zum Beispiel: In der Produktionsumgebung haben die meisten Entwickler nur Abfrageberechtigungen und keine Berechtigungen zum Hinzufügen, Löschen oder Ändern (mit Ausnahme einiger kleiner Unternehmen).
Wenn Sie die Erlaubnis haben, öffnen Sie die Tabelle und fahren Sie mit der Ausführung fort. Wenn eine Tabelle geöffnet wird, verwendet der Executor die von der Engine bereitgestellte Schnittstelle basierend auf der Engine-Definition der Tabelle.
Speicher-Engine-Schicht
Diese Schicht kann als Persistenzschicht in unserem Geschäftssystem verstanden werden.
Das Konzept der Speicher-Engine gibt es nur bei MySQL. Nicht alle relationalen Datenbanken verfügen über das Konzept der Speicher-Engine.
Die Datenbankspeicher-Engine ist die zugrunde liegende Softwareorganisation der Datenbank. Das Datenbankverwaltungssystem (DBMS) verwendet die Daten-Engine zum Erstellen, Abfragen, Aktualisieren und Löschen von Daten. Verschiedene Speicher-Engines bieten unterschiedliche Speichermechanismen, Indizierungstechniken, Sperrebenen und andere Funktionen. Durch die Verwendung verschiedener Speicher-Engines können Sie auch bestimmte Funktionen erhalten. Heutzutage unterstützen viele verschiedene Datenbankverwaltungssysteme eine Vielzahl unterschiedlicher Daten-Engines.
Da Daten in Form einer Tabelle in einer relationalen Datenbank gespeichert werden, kann die Speicher-Engine auch als Tabellentyp bezeichnet werden (Tabellentyp, dh die Art der Speicherung und Operation dieser Tabelle).
MySQL Version 5.5 (MySQL-Version
MySQL Version 5.5 (MySQL-Version >= Version 5.5) und höher, die Standardspeicher-Engine ist InnoDB.
Das Folgende ist ein Vergleich einiger relativ häufig verwendeter Engines:
In tatsächlichen Projekten verwenden die meisten InnoDB, dann MyISAM und zumindest andere Speicher-Engines.
Wir können den Befehl verwenden, um anzuzeigen, welche Speicher-Engines MySQL bereitgestellt hat:
show engies;
Wir können auch den Befehl verwenden, um die aktuelle Standard-Speicher-Engine von MySQL anzuzeigen:
Variablen wie „%storage_engine%“ anzeigen;
Der Unterschied zwischen MyISAM- und InnoDB-EnginesMyISAM与 InnoDB引擎的区别
MySQL
MySQLDie Standardspeicher-Engine vor Version 5.5 ist die MyISAM-Speicher-Engine. Viele Systemtabellen in MySQL verwenden die MyISAM-Speicher-Engine , die temporäre Systemtabelle verwendet auch die MyISAM-Speicher-Engine, aber nach Mysql5.5 ist die Standard-Speicher-Engine die InnoDB-Speicher-Engine.
Wie wähle ich zwischen den beiden Speicher-Engines?
Gibt es Transaktionsvorgänge? Ja, InnoDB.
Speichern Sie gleichzeitige Änderungen? Ja, InnoDB.
Verfolgen Sie schnelle Abfragen mit weniger Datenänderungen? Ja, MyISAM.
Verwenden Sie die Volltextindizierung? Wenn Sie nicht auf ein Drittanbieter-Framework verweisen, können Sie MyISAM wählen, es ist jedoch effizienter, ein Drittanbieter-Framework und InnDB zu verwenden. Die InnoDB-Speicher-Engine verfügt hauptsächlich über die folgenden Funktionen: Unterstützt Transaktionen
Unterstützung Das Lesen mehrerer Versionen unterstützt Sperren auf Zeilenebene. Lese- und Schreibblockierungen hängen von der Isolationsstufe der Transaktion ab
Unterstützt Caching, das sowohl Indizes als auch Daten zwischenspeichern kann
Die gesamte Tabelle und die Primärschlüssel werden im Cluster-Modus gespeichert, um einen ausgeglichenen Baum zu bilden
Natürlich nicht Es wird gesagt, dass InnoDB gut sein muss. In der tatsächlichen Entwicklung müssen Sie sich je nach Szenario entscheiden, ob Sie InnoDB oder MyISAM verwenden möchten.
MyIASM (diese Engine war die Standardspeicher-Engine in MySQL-Datenbanken vor 5.5) Funktionen:
MyISAM bietet keine Unterstützung für Datenbanktransaktionen
Nicht unterstützte Zeile -Level-Sperren und Fremdschlüssel
Aufgrund von 2 muss beim Ausführen einer INSERT-Einfüge- oder UPDATE-Aktualisierungsanweisung, also beim Ausführen eines Schreibvorgangs, die gesamte Tabelle gesperrt werden, damit die Effizienz verbessert wird reduziert
MyISAM speichert die Anzahl der Zeilen in der Tabelle. Beim Ausführen von SELECT COUNT(*) FROM TABLE können die relevanten Werte direkt gelesen werden, ohne die gesamte Tabelle zu scannen, was schnell ist.
Der Unterschied zwischen den beiden:
MyISAM ist transaktionssicher
MyISAM Die Granularität von. lock s ist auf Tabellenebene und InnoDB unterstützt Zeilenebene Schlösser
MyISAM unterstützt Volltextindizes, während InnoDB keine Volltextindizes vor MySQL5.6 unterstützt. Es unterstützt VOLLTEXT-Indizes ab MySQL5.6.
Vergleich der Nutzungsszenarien:
Wenn Sie eine große Anzahl ausgewählter Vorgänge ausführen möchten, sollten Sie MyISAM wählen
Wenn Sie auftreten möchten eine große Anzahl von Einfügungen und Ups Für Datumsoperationen sollte InnoDB ausgewählt werden
Große Datensätze neigen dazu, die InnoDB-Engine zu wählen, da sie die Transaktionsverarbeitung und Fehlerbehebung unterstützt. Die Größe der Datenbank bestimmt die Länge der Wiederherstellungszeit. InnoDB kann Transaktionsprotokolle für die schnellere Datenwiederherstellung verwenden. Primärschlüsselabfragen werden unter der InnoDB-Engine ebenfalls recht schnell sein, es ist jedoch zu beachten, dass ein zu langer Primärschlüssel auch zu Leistungsproblemen führt.
Relativ gesehen wird InnoDB eher von Internetunternehmen genutzt.
Systemdateispeicherschicht
Diese Schicht kann auch als Datenbank in unserem Geschäftssystem verstanden werden.
Die Systemdateispeicherschicht ist hauptsächlich dafür verantwortlich, Datenbankdaten und Protokolle in Systemdateien zu speichern und gleichzeitig die Transaktion mit der Speicher-Engine abzuschließen. Es handelt sich um die physische Speicherschicht von Dateien.
Zum Beispiel: Datendateien, Protokolldateien, PID-Dateien, Konfigurationsdateien usw.
Datendatei
„db.opt-Datei“: Zeichnen Sie den Standardzeichensatz und die Überprüfungsregeln dieser Datenbank auf.
"frm-Datei": Im Edge gespeicherte Metadateninformationen, einschließlich Definitionsinformationen der Tabellenstruktur usw. Jede Tabelle verfügt über eine entsprechende FRM-Datei.
„MYD-Datei“: Eine Datei für die MyISAM-Speicher-Engine, die die Dateninformationen der MyISAM-Tabelle speichert. Jede MyISAM-Tabelle verfügt über eine .MYD-Datei.
MySQL Wir können uns das gesamte System als ein Softwaresystem vorstellen, das wir täglich entwickeln. Es verfügt auch über eine Zugriffsschicht, die für die Verbindung mit externen Clients ausgelegt ist. Sie ist dem Gateway unseres Systems sehr ähnlich. und der Cache ähnelt dem in unserem Geschäftscode. Der verwendete Cache und Parser können als Mittel zur Optimierung des Codes im Geschäftssystem verwendet werden Die Engine entspricht unserer Persistenzschicht und das Dateisystem entspricht der gesamten Geschäftsdatenbank. MySQL整个系统我们可以看成是我们日常开发的软件系统,也有接入层,专门对接外面客户端的,和我们系统的网关就很像,缓存也就类似我们业务代码中使用的缓存,解析器可以理解为业务系统中参数解析以及参数校验,优化层可以当做我们开发代码优化的手段,然后存储引擎就相当于我们的持久层,文件系统相当于整个业务系统中的数据库。
可能比喻不是非常的恰当,但是希望大家能领略轻重的含义,目的只有一个,那就是让大家能轻松掌握MySQLVielleicht ist die Metapher nicht sehr passend, aber ich hoffe, dass jeder die Bedeutung von Strenge verstehen kann. Es gibt nur einen Zweck, nämlich es jedem leicht verständlich zu machenMySQLs Gesamtsituation.
Einige Bilder im Artikel stammen aus dem Internet und werden gelöscht!
Beneiden Sie nicht jeden Tag einige großartige Menschen oder großartige Götter, sie sind auch Schritt für Schritt gekommen. Seien Sie zuversichtlich, solange Sie es Stück für Stück tun und bodenständig vorgehen, werden Sie ein großer Meister.
Empfohlene Lektüre
Wenn du dich nicht bewegst, bewege ich mich nicht ---Beobachtermodus
Das obige ist der detaillierte Inhalt vonMeituan-Interviewer: Erklären Sie klar und deutlich das MySQL-Struktursystem und machen Sie sofort ein Angebot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!