Heim  >  Artikel  >  Datenbank  >  MySQL-Lese- und Schreibtrennung (Praktisch)

MySQL-Lese- und Schreibtrennung (Praktisch)

黄舟
黄舟Original
2016-12-17 14:20:53912Durchsuche

Eine der leistungsstärksten Funktionen von MySQL Proxy ist die „Lese-/Schreibaufteilung“. Das Grundprinzip besteht darin, dass die Master-Datenbank Transaktionsabfragen verarbeitet, 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 (Praktisch)

Jan Kneschke stellte diese Technik und das Problem des Verbindungspools ausführlich in „MySQL Proxy lernt R/W-Splitting“ vor:
Um eine Lese- und Schreibtrennung zu erreichen, haben wir Benötigen Sie einen 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-/Ergebnisrückgabephase 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- und Schreibtrennung:

- 读写分离 
  -- 
  -- 发送所有的非事务性Select到一个从数据库 
  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

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

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


Stellungnahme:
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