Heim  >  Artikel  >  Datenbank  >  Welche Möglichkeiten gibt es, MySQL-Daten mit Elasticsearch zu synchronisieren?

Welche Möglichkeiten gibt es, MySQL-Daten mit Elasticsearch zu synchronisieren?

王林
王林nach vorne
2023-05-30 20:49:04969Durchsuche

1. Synchronisierung der Geschäftsschicht

Da der Betrieb von MySQL-Daten auch in der Geschäftsschicht abgeschlossen wird, ist es selbstverständlich, andere Datenquellen in der Geschäftsschicht zu synchronisieren. Ein häufigerer Ansatz besteht darin, relevante Synchronisierungen in den Hooks-Hook von ORM zu schreiben Code.

Der Nachteil dieses Ansatzes besteht darin, dass bei immer mehr Diensten die synchronisierten Teile möglicherweise zu verstreut sind, was die Aktualisierung und Iteration erschwert. Beispielsweise kann sich eine inkompatible Migration von ES-Indizes auf das gesamte System auswirken.

2. Middleware-Synchronisierung

Wenn sich die Anwendungsarchitektur zu Mikrodiensten entwickelt, ruft jeder Dienst möglicherweise nicht mehr direkt MySQL auf, sondern über eine Middleware-Middleware-Schicht. Zu diesem Zeitpunkt kann die Middleware MySQL betreiben und gleichzeitig andere Datenquellen synchronisieren.

Diese Methode erfordert die Anpassung der Middleware und weist eine gewisse Komplexität auf.

3. Geplante Aufgaben werden basierend auf dem Feld „update_at“ synchronisiert.

Legen Sie spezielle Felder in der MySQL-Tabellenstruktur fest, z. B. „update_at“ (Datenaktualisierungszeit). Basierend auf diesem Feld fragen die geplanten Aufgaben die tatsächlich geänderten Daten ab und realisieren so Daten update Inkrementelle Updates.

Sie können das Open-Source-Logstash verwenden, um diese Methode abzuschließen.

Natürlich liegt auch der Nachteil auf der Hand, nämlich dass das Löschen von Daten nicht synchronisiert werden kann.

4. Binlog-Synchronisation analysieren

Zum Beispiel der berühmte Kanal.

Verkleiden Sie sich als Sklave, um das Binärprotokoll von MySQL zu analysieren und mehr über Datenänderungen zu erfahren.

Dies ist eine relativ ausgereifte Lösung in der Branche.

Für diese Methode müssen Sie das binlog-format von MySQL auf den ROW-Modus einstellen. binlog-format 设置为 ROW 模式。

5. 解析 binlog — mixed / statement 格式

MySQL 的 binlog 有三种格式:

  • ROW 模式,binlog 按行的方式去记录数据的变更;

  • statement 模式,binlog 记录的是 SQL 语句;

  • mixed 模式时,混合以上两种,记录的可能是 SQL 语句或者 ROW 模式的每行变更;

某些情况下,可能你的 MySQL binlog 无法被设置为 ROW 模式,这种时候,我们仍然可以去统一解析 binlog ,从而完成同步,但是这里解析出来的当然还是原始的 SQL 语句或者 ROW

5. Binlog analysieren – gemischtes / Anweisungsformat

MySQLs binlog hat drei Formate:

    ROW-Modus, Binlog zeichnet Datenänderungen in Zeilen auf; 🎜

  • Anweisung-Modus, Binlog-Datensätze Es handelt sich um eine SQL-Anweisung; 🎜

  • Im gemischten-Modus werden die beiden oben genannten gemischt, und was aufgezeichnet wird, kann eine SQL-Anweisung oder jede Zeile im ROW-Modus sein . Ändern; 🎜

🎜In einigen Fällen ist Ihr MySQL-binlog möglicherweise nicht auf den ROW-Modus eingestellt Analysieren Sie das Binlog einheitlich, um die Synchronisierung abzuschließen, aber was hier analysiert wird, ist natürlich die ursprüngliche SQL-Anweisung oder jede Zeilenänderung des ROW-Musters. Zu diesem Zeitpunkt müssen wir diese SQL oder jede Zeile entsprechend analysieren B. die Verwendung eines regulären Abgleichs oder eines abstrakten AST-Syntaxbaums usw., und dann die Synchronisierung der Daten basierend auf den Analyseergebnissen. 🎜🎜Die Einschränkungen dieser Methode liegen auf der Hand. Erstens müssen Sie Ihre Geschäftsanalyse-SQL anpassen. Zweitens können Stapelaktualisierungsszenarien natürlich schwierig sein, wenn Ihre Daten einfach auf der Grundlage des Primärschlüssels geändert oder gelöscht werden. Sie können besser anwendbar sein. 🎜

Das obige ist der detaillierte Inhalt vonWelche Möglichkeiten gibt es, MySQL-Daten mit Elasticsearch zu synchronisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen