Rumah pangkalan data tutorial mysql 跨库事务一致性问题的解决方案(例)

跨库事务一致性问题的解决方案(例)

Jun 07, 2016 pm 04:04 PM
konsisten hal ehwal kami penyelesaian

我们看一个跨库事务一致性的问题,这是一个简单的场景:有新老两个系统,对应新老两套数据库,新数据库采用分库分表的设计,考虑到项目发布之后可能存在风险,采取了新老系统的并行方案。这个系统的业务比较简单:接收来自外部的数据,然后对数据进行核对处

我们看一个跨库事务一致性的问题,这是一个简单的场景:有新老两个系统,对应新老两套数据库,新数据库采用分库分表的设计,考虑到项目发布之后可能存在风险,采取了新老系统的并行方案。这个系统的业务比较简单:接收来自外部的数据,然后对数据进行核对处理。为了保证新老系统能够并行,在接收数据的时候必须实现双写方案,从而导致了跨库事务的一致性问题。

下面一幅图展示这一简单的场景

\

这里面会存在一个小问题,就是可能存在写入老库成功,但是写入新库失败的场景。

我们假设出现这种概率的情况是百万分之一,在系统发布的情况下,这种概率可能更高。从目前我们的数据量来看,一天大概5000W,那么出现不一致的数据量在500条。考虑到这个是数据核算系统,不能有一条丢失的情况,否则两边比对结果可能会不一致。所以需要保证一致性。

这种问题,有以下几种解决方案

1 考虑使用JTA等支持分布式事务的事务管理器

这种方案的优势就是直接有现成的解决方案,一般的j2ee服务器都提供了JTA的相关的实现。比较明显的问题就是解决方案太重量级。一般JTA除了服务器要支持,对应的数据库服务厂商一般也要提供相应的商业支持,主要是提供基于 XAResource JDBC驱动,这一些商业上的支持,部分是需要付费的。而且使用XA 数据库驱动,本身可能导致一些潜在的问题,尤其是基于不同的数据库厂商的时候。而XA是基于两阶段提交协议,事务管理器为了完成一个事务,需要多次和数据库通信,效率上比较低。

2 考虑使用数据库自身的数据同步机制

如果新老库的结构基本一样,这种方案还是比较靠谱的。也是比较简单的方案。这种方案的局限性也再次。在本项目中,新库不是一个物理库,而是多个物理库,而老库是一个物理库。如果要用数据库自身的同步机制,涉及到多个库和一个库之间的数据复制。同时由于分表的方案也不一样,导致两边做一个映射的配置,而这个需要在数据库层面进行,逻辑相当的复杂,解决方案成本也比较高。相当于把重要的分库分表的逻辑在数据库这一层重新实现了一份。

其实这个也带来一个维护问题,一旦我们觉得新系统已经足够稳定。应用程序可以之间在写入库进行切换,把老库的逻辑切掉,从而实现了只写新库的需求。整个过程也不需要进行再次发布。而数据库的方案则需要停掉脚本,在多个地方进行配置。

3 在old库存放相同的两张模型表,一张表用于old库的持久化表,另外一张作为临时表,主要是作为需要同步到到新库的数据。如果已经同步到新库,就删除。如果没有同步到新库就同步到新库。这个过程采用定时机制,每分钟定时提取临时表一定数据量的数据,批量导入到新库。通过努力重试,来保证一致性。而新库则需要保证幂等性,保证数据只会同步过一次。一般情况下,则是通过数据特征标识符来识别,这个一般都是数据的唯一性主键。

下面是简单的实现:

\

这三种方案的主要思想就是 采取重试机制,这个只是分布式事务里面的一种模型,相应的还有两阶段提交,异常恢复补偿等机制。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1660
14
Tutorial PHP
1261
29
Tutorial C#
1234
24
Penyelesaian untuk Win11 tidak dapat memasang pek bahasa Cina Penyelesaian untuk Win11 tidak dapat memasang pek bahasa Cina Mar 09, 2024 am 09:15 AM

Win11 ialah sistem pengendalian terkini yang dilancarkan oleh Microsoft Berbanding dengan versi sebelumnya, Win11 telah meningkatkan reka bentuk antara muka dan pengalaman pengguna. Walau bagaimanapun, sesetengah pengguna melaporkan bahawa mereka menghadapi masalah tidak dapat memasang pek bahasa Cina selepas memasang Win11, yang menyebabkan masalah untuk mereka menggunakan bahasa Cina dalam sistem. Artikel ini akan memberikan beberapa penyelesaian kepada masalah yang Win11 tidak dapat memasang pek bahasa Cina untuk membantu pengguna menggunakan bahasa Cina dengan lancar. Pertama, kita perlu memahami mengapa pek bahasa Cina tidak boleh dipasang. Secara umumnya, Win11

Sebab dan penyelesaian kegagalan pemasangan perpustakaan scipy Sebab dan penyelesaian kegagalan pemasangan perpustakaan scipy Feb 22, 2024 pm 06:27 PM

Sebab dan penyelesaian kegagalan pemasangan perpustakaan scipy, contoh kod khusus diperlukan Apabila melakukan pengiraan saintifik dalam Python, scipy ialah perpustakaan yang sangat biasa digunakan, yang menyediakan banyak fungsi untuk pengiraan berangka, pengoptimuman, statistik dan pemprosesan isyarat. Walau bagaimanapun, apabila memasang perpustakaan scipy, kadangkala anda menghadapi beberapa masalah, menyebabkan pemasangan gagal. Artikel ini akan meneroka sebab utama pemasangan perpustakaan scipy gagal dan menyediakan penyelesaian yang sepadan. Pemasangan pakej bergantung gagal Pustaka scipy bergantung pada beberapa perpustakaan Python lain, seperti nu.

Penyelesaian yang berkesan untuk menyelesaikan masalah aksara bercelaru yang disebabkan oleh pengubahsuaian set aksara Oracle Penyelesaian yang berkesan untuk menyelesaikan masalah aksara bercelaru yang disebabkan oleh pengubahsuaian set aksara Oracle Mar 03, 2024 am 09:57 AM

Tajuk: Penyelesaian yang berkesan untuk menyelesaikan masalah aksara bercelaru yang disebabkan oleh pengubahsuaian set aksara Oracle Dalam pangkalan data Oracle, apabila set aksara diubah suai, masalah aksara bercelaru sering berlaku disebabkan kehadiran aksara yang tidak serasi dalam data. Untuk menyelesaikan masalah ini, kita perlu menggunakan beberapa penyelesaian yang berkesan. Artikel ini akan memperkenalkan beberapa penyelesaian khusus dan contoh kod untuk menyelesaikan masalah aksara bercelaru yang disebabkan oleh pengubahsuaian set aksara Oracle. 1. Eksport data dan set semula set aksara Pertama, kita boleh mengeksport data dalam pangkalan data dengan menggunakan arahan expdp.

Masalah dan penyelesaian biasa fungsi Oracle NVL Masalah dan penyelesaian biasa fungsi Oracle NVL Mar 10, 2024 am 08:42 AM

Masalah dan penyelesaian biasa untuk fungsi OracleNVL Pangkalan data Oracle ialah sistem pangkalan data hubungan yang digunakan secara meluas, dan selalunya perlu untuk menangani nilai nol semasa pemprosesan data. Untuk menangani masalah yang disebabkan oleh nilai nol, Oracle menyediakan fungsi NVL untuk mengendalikan nilai nol. Artikel ini akan memperkenalkan masalah biasa dan penyelesaian fungsi NVL, dan memberikan contoh kod khusus. Soalan 1: Penggunaan fungsi NVL yang tidak betul Sintaks asas fungsi NVL ialah: NVL(expr1,default_value).

Melaksanakan Algoritma Pembelajaran Mesin dalam C++: Cabaran dan Penyelesaian Biasa Melaksanakan Algoritma Pembelajaran Mesin dalam C++: Cabaran dan Penyelesaian Biasa Jun 03, 2024 pm 01:25 PM

Cabaran biasa yang dihadapi oleh algoritma pembelajaran mesin dalam C++ termasuk pengurusan memori, multi-threading, pengoptimuman prestasi dan kebolehselenggaraan. Penyelesaian termasuk menggunakan penunjuk pintar, perpustakaan benang moden, arahan SIMD dan perpustakaan pihak ketiga, serta mengikuti garis panduan gaya pengekodan dan menggunakan alat automasi. Kes praktikal menunjukkan cara menggunakan perpustakaan Eigen untuk melaksanakan algoritma regresi linear, mengurus memori dengan berkesan dan menggunakan operasi matriks berprestasi tinggi.

Mendedahkan kaedah untuk menyelesaikan kegagalan kunci PyCharm Mendedahkan kaedah untuk menyelesaikan kegagalan kunci PyCharm Feb 23, 2024 pm 10:51 PM

PyCharm ialah persekitaran pembangunan bersepadu Python yang berkuasa yang disukai secara meluas oleh pembangun. Walau bagaimanapun, kadangkala kami mungkin menghadapi masalah ketidaksahihan utama apabila menggunakan PyCharm, mengakibatkan ketidakupayaan untuk menggunakan perisian secara normal. Artikel ini akan mendedahkan penyelesaian kepada kegagalan kunci PyCharm dan menyediakan contoh kod khusus untuk membantu pembaca menyelesaikan masalah ini dengan cepat. Sebelum kita mula menyelesaikan masalah, kita perlu memahami terlebih dahulu mengapa kunci itu tidak sah. Kegagalan kunci PyCharm biasanya disebabkan oleh masalah rangkaian atau perisian itu sendiri

Punca dan penyelesaian biasa untuk aksara Cina yang kacau dalam pemasangan MySQL Punca dan penyelesaian biasa untuk aksara Cina yang kacau dalam pemasangan MySQL Mar 02, 2024 am 09:00 AM

Penyebab dan penyelesaian biasa untuk aksara Cina yang kacau dalam pemasangan MySQL MySQL ialah sistem pengurusan pangkalan data hubungan yang biasa digunakan, tetapi anda mungkin menghadapi masalah aksara Cina yang kacau semasa digunakan, yang membawa masalah kepada pembangun dan pentadbir sistem. Masalah aksara Cina bercelaru terutamanya disebabkan oleh tetapan set aksara yang salah, set aksara yang tidak konsisten antara pelayan pangkalan data dan pelanggan, dsb. Artikel ini akan memperkenalkan secara terperinci punca dan penyelesaian biasa aksara Cina yang kacau dalam pemasangan MySQL untuk membantu semua orang menyelesaikan masalah ini dengan lebih baik. 1. Sebab biasa: tetapan set watak

Terokai penyelesaian kepada penggunaan CPU dan Sys yang tidak normal dalam Linux Terokai penyelesaian kepada penggunaan CPU dan Sys yang tidak normal dalam Linux Mar 01, 2024 pm 05:36 PM

[Tajuk] Terokai penyelesaian kepada penggunaan CPU dan Sys yang tidak normal dalam sistem Linux, penggunaan CPU dan Sys yang tidak normal sering menjadikan sistem berjalan perlahan atau tidak stabil, menyebabkan masalah kepada pengguna. Artikel ini akan meneroka punca anomali ini dan menyediakan beberapa penyelesaian, serta contoh kod khusus. Penggunaan CPU yang tidak normal Penggunaan CPU yang tidak normal biasanya disebabkan oleh terlalu banyak proses yang berjalan atau proses tertentu yang menduduki terlalu banyak sumber CPU. Untuk menyelesaikan masalah ini, anda boleh melihat proses yang berjalan pada sistem

See all articles