Heim > Datenbank > MySQL-Tutorial > Hauptteil

MySQL-Lese- und Schreibtrennung (Grundlagen)

黄舟
Freigeben: 2016-12-17 14:18:50
Original
886 Leute haben es durchsucht

Das Grundprinzip besteht darin, die Hauptdatenbank transaktionale Abfragen verarbeiten zu lassen, während die Slave-Datenbank SELECT-Abfragen verarbeitet. Die Datenbankreplikation wird verwendet, um durch Transaktionsabfragen verursachte Änderungen an Slave-Datenbanken im Cluster zu synchronisieren. MySQL-Lese- und Schreibtrennung (Grundlagen)

Jan Kneschke stellte diese Technik und das Verbindungspoolproblem ausführlich in „MySQL Proxy lernt R/W-Splitting“ vor:

Um eine Lese- und Schreibtrennung zu erreichen, benötigen wir eine Verbindungspool. Wir wechseln nur dann zu einem Backend, wenn eine authentifizierte Verbindung zu diesem Backend geöffnet ist. Das MySQL-Protokoll beginnt mit einem Handshake. Beim Eintritt in die Abfrage-/Rückgabeergebnisphase ist es zu spät, die neue Verbindung zu authentifizieren. Wir müssen sicherstellen, dass wir über genügend offene Verbindungen verfügen, damit alles ordnungsgemäß funktioniert.
LUA-Skript zur Implementierung der Lese-Schreib-Trennung:
 --Lese-Schreib-Trennung
 --
 --Alle nicht-transaktionalen Selects an eine Slave-Datenbank senden

if is_in_transaction == 0 and 
  packet:byte() == proxy.COM_QUERY and 
  packet:sub(2, 7) == "SELECT" then 
  local max_conns = -1 
  local max_conns_ndx = 0 
  for i = 1, #proxy.servers do 
  local s = proxy.servers[i] 
  -- 需要选择一个拥有空闲连接的从数据库 
  if s.type == proxy.BACKEND_TYPE_RO and 
  s.idling_connections > 0 then 
  if max_conns == -1 or 
  s.connected_clients < max_conns then 
  max_conns = s.connected_clients 
  max_conns_ndx = i 
  end 
  end 
  end 
  -- 至此,我们找到了一个拥有空闲连接的从数据库 
  if max_conns_ndx > 0 then 
  proxy.connection.backend_ndx = max_conns_ndx 
  end 
  else 
  -- 发送到主数据库 
  end 
  return proxy.PROXY_SEND_QUERY
Nach dem Login kopieren

Kommentar: Diese Technik kann auch zur Implementierung anderer Datenverteilungsstrategien wie Sharding verwendet werden.

Das Obige ist der Inhalt der MySQL-Lese-/Schreibtrennung (Grundlagen). Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!