Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Handhabung von Transaktionen in einer Multithread-Umgebung

Ich würde vorschlagen, alle SQL-Aktionen von mehreren Threads in einer Zwischendatenstruktur in die Warteschlange zu stellen und dann von einem einzelnen Thread in die Datenbank zu stellen. Es ist möglich, Thread-sichere Zwischenstrukturen wie ConcurrentHashMap zu haben , ConcurrentLinkedQueue oder Sie können einfach synchronisieren, wenn Sie damit arbeiten.

Auf diese Weise müssen Sie die Transaktion nicht einmal im Voraus starten. Die ausstehenden Daten sind möglicherweise weniger sicher, aber ich gehe davon aus, dass sie in der Datenbank nicht viel sicherer sind, solange die Transaktion noch nicht festgeschrieben ist.

Das funktioniert natürlich nur, wenn Sie select nicht haben Anweisungen, die nicht festgeschriebene Transaktionsdaten aus derselben Transaktion auswählen. Um solche Abfragen auf die eine oder andere Weise loszuwerden, kann eine Neugestaltung erforderlich sein.

Verwenden Sie CountDownLatch um zu erkennen, wann alle Daten bereit sind und der Thread zum Schreiben der Datenbank seine Aktion starten sollte. Wenn dies nie passiert, verwenden Sie das Reaktormuster für den Thread zum Schreiben der Datenbank.