mysql - 异步写入多个 MySQL 数据库

标签 mysql amazon-web-services load-balancing multi-master-replication

我使用的是 AWS RDS,因此区域之间的数据库复制是不可能的。

我的应用程序用 PHP 编写并部署在所有区域,我正在寻找一种快速可靠的方法来实现这一目标。

我将建立 MySQL 连接:

设置@@auto_increment_increment=NUMBER_OF_WRITEABLE_DATABASES;

设置@@auto_increment_offset = REGION_ID;

因此,AI pk 在各个地区都是独一无二的。

我当前的计划是保留一个查询日志表,其中字段=> id、queries、status、user_id。它将在同一页面加载中将所有插入、更新、删除查询记录到查询字段中。

状态代码:

状态 0 => 未执行

状态 1 => 在所有区域成功执行

状态 2 => 失败

状态 3 => 失败,受影响的行不匹配

示例行:

id=>1 查询=> 插入配置文件值 (1,{USER_ID},'用户名','电子邮件')##SEPERATOR##AFFECTED_COUNT 更新用户设置 last_modified='2012-12...' 其中 id={USER_ID}##SEPERATOR##AFFECTED_COUNT 状态=0 user_id=>{USER_ID}

并且将会有一个守护进程读取状态!= 1的记录,并将在所有区域上处理它们而不提交,一旦所有运行没有错误,它将提交或在出现错误时回滚。

这就是我的想法和将要使用的。

我的问题是对于这种情况有没有更合适/经过测试的方法,或者我的方法是否有任何问题。

提前致谢

最佳答案

我最初的想法是,如果您尝试使用 RDS 作为跨多个区域强制执行唯一记录 ID 的解决方案,那么您就走错了路。我认为您可能需要重新考虑跨区域唯一性的实际需求,或使用多个列(即自动增量加区域标识符)强制唯一性。可以读取这些数据并将其放入一些最终一致的数据存储中以用于读取目的。

关于mysql - 异步写入多个 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14037229/

相关文章:

Azure 流量管理器负载平衡选项

mysql - 来自不同mysql表的最小值和最大值

mysql - mysql : Add if condition in where statement?

java - Amazon SNS 推送 - 如何定义推送通知图标

database - 是否可以在microsoft sql server前面使用mysql proxy进行查询处理?

node.js - Node 集群和/或 Docker 集群?

mysql extract_json 数组中的值

mysql - 使用 JPA/Spring/Hibernate 自动截断字符串列的方法?

powershell - AWS EC2 停止所有通过 PowerShell/CMD 工具

python - 将 AWS API 与 Python 结合使用以使用 Polly 服务