Heim >Datenbank >MySQL-Tutorial >Wie stellt MySQL die Reihenfolge der Nachrichten sicher?

Wie stellt MySQL die Reihenfolge der Nachrichten sicher?

PHPz
PHPznach vorne
2023-05-29 22:55:161078Durchsuche

Lassen Sie mich ein Beispiel geben. Wir haben bereits ein MySQL-binlog-Synchronisierungssystem erstellt, und der Druck ist immer noch sehr hoch. Die täglichen Synchronisierungsdaten müssen Hunderte von Millionen erreichen, was bedeutet, dass die Datenmenge höher ist intakt von einer MySQL-Bibliothek synchronisiert. Wechseln Sie zu einer anderen MySQL-Bibliothek (MySQL -> MySQL). Ein gemeinsamer Punkt ist, dass beispielsweise ein Big-Data-Team eine MySQL-Bibliothek synchronisieren muss, um verschiedene komplexe Vorgänge an den Daten des Geschäftssystems des Unternehmens durchzuführen. binlog 同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(mysql -> mysql)。常见的一点在于说比如大数据 team,就需要同步一个 mysql 库过来,对公司的业务系统的数据做各种复杂的操作。

你在 mysql 里增删改一条数据,对应出来了增删改 3 条 binlog 日志,接着这三条 binlog

Wenn Sie ein Datenelement in MySQL hinzufügen, löschen oder ändern, werden drei binlog-Protokolle generiert, die dem Hinzufügen, Löschen und Ändern entsprechen. Anschließend werden diese drei binlog-Protokolle generiert wird an MQ gesendet und dann nacheinander verbraucht und ausgeführt. Zumindest muss man dafür sorgen, dass die Leute in der richtigen Reihenfolge kommen, oder? Ansonsten hieß es ursprünglich: hinzufügen, ändern, löschen; aber Sie haben einfach die Reihenfolge geändert und ausgeführt, um zu löschen, zu ändern und hinzuzufügen.

Ursprünglich hätten diese Daten am Ende gelöscht werden sollen, aber dadurch wurde die Reihenfolge falsch angegeben, und die Daten blieben am Ende erhalten, und die Datensynchronisierung ging schief.

Sehen wir uns zunächst zwei Szenarien an, in denen die Bestellung außer Betrieb sein wird:
  • RabbitMQ: eine Warteschlange, mehrere Verbraucher. Beispielsweise sendet der Produzent drei Datenelemente in der Reihenfolge data1/data2/data3 an RabbitMQ und die Daten werden in eine Speicherwarteschlange von RabbitMQ verschoben. Es gibt drei Verbraucher, die eines der drei Datenelemente von MQ verbrauchen. Infolgedessen schließt Verbraucher 2 den Vorgang zuerst ab und speichert Daten2 in der Datenbank, gefolgt von Daten1/Daten3. Das ist offensichtlich nicht durcheinander.

Wie stellt MySQL die Reihenfolge der Nachrichten sicher?


  • Kafka: Wir haben zum Beispiel ein Thema mit drei Partitionen erstellt. Wenn der Produzent schreibt, kann er tatsächlich einen Schlüssel angeben. Wenn wir beispielsweise eine Bestell-ID als Schlüssel angeben, werden die mit dieser Bestellung verbundenen Daten definitiv auf dieselbe Partition verteilt, und die Daten in dieser Partition müssen vorhanden sein ist ein Befehl.

    Wenn der Verbraucher die Daten aus der Partition entnimmt, müssen diese in Ordnung sein. Zu diesem Zeitpunkt ist die Reihenfolge noch in Ordnung und es gibt keine Verwirrung. Als Nächstes erstellen wir möglicherweise mehrere Threads im Verbraucher, um Nachrichten gleichzeitig zu verarbeiten. Denn wenn der Verbraucher in einem einzelnen Thread konsumiert und verarbeitet und die Verarbeitung zeitaufwändig ist, z. B. die Verarbeitung einer Nachricht mehrere zehn Millisekunden dauert, können in einer Sekunde nur Dutzende Nachrichten verarbeitet werden, was einen zu geringen Durchsatz darstellt . Wenn mehrere Threads gleichzeitig ausgeführt werden, kann die Reihenfolge durcheinander geraten.

Wie stellt MySQL die Reihenfolge der Nachrichten sicher?

Lösung


RabbitMQ

Mehrere Warteschlangen aufteilen, jede Warteschlange hat einen Verbraucher, was nur aus mehreren Warteschlangen besteht, was in der Tat ein problematischer Punkt ist, oder es gibt nur eine Warteschlange, die jedoch einem Verbraucher entspricht, und dieser Verbraucher verwendet dann intern eine Speicherwarteschlange für die Warteschlange Verteilt es dann an verschiedene zugrunde liegende Arbeiter, die es bearbeiten.

Wie stellt MySQL die Reihenfolge der Nachrichten sicher?

Kafka
  • Ein Thema, eine Partition, ein Verbraucher, der interne Single-Thread-Verbrauch, der Single-Thread-Durchsatz ist zu niedrig, im Allgemeinen wird dies nicht verwendet.
  • Schreiben Sie N Speicherwarteschlangen, und Daten mit demselben Schlüssel werden in dieselbe Speicherwarteschlange verschoben. Bei N Threads belegt jeder Thread jeweils eine Speicherwarteschlange, sodass die Reihenfolge garantiert werden kann.

Wie stellt MySQL die Reihenfolge der Nachrichten sicher?

🎜

Das obige ist der detaillierte Inhalt vonWie stellt MySQL die Reihenfolge der Nachrichten sicher?. 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