MySQL集群、MyCat数据库中间件、读写分离、分库分表、E-R模型中的全局表和全局唯一ID是数据库架构设计中常用的技术。
- MySQL集群:通常使用MySQL Replication或Group Replication来保证数据的高可用性。
- MyCat数据库中间件:一个支持MySQL协议的数据库代理,用于分库分表、读写分离等。
- 读写分离:配置MyCat,实现读操作到主服务器(写操作),写操作到从服务器(读操作)。
- 分库分表:通过MyCat配置,可以将数据分散到不同的数据库实例中。
- E-R模型中的全局表:一个数据库实例中的表,被多个其他数据库实例引用,用于存储全局共享的数据。
- 全局唯一ID:如UUID、数据库序列、Redis的INCR命令等,确保生成的ID在全局范围内唯一。
示例配置:
MySQL集群配置(简化):
<mycat:schema xmlns:mycat="http://io.mycat/">
<dataNode name="dn1" dataHost="host1" database="db1" />
<dataNode name="dn2" dataHost="host2" database="db2" />
<!-- 配置主从 -->
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="localhost:3306" user="user" password="pass">
<readHost host="hostS1" url="slave-host:3306" user="user" password="pass"/>
</writeHost>
</dataHost>
</mycat:schema>
MyCat读写分离配置(简化):
<mycat:schema xmlns:mycat="http://io.mycat/">
<table name="user" dataNode="dn1,dn2" rule="auto-sharding-long" />
<!-- 配置数据主机 -->
<dataNode name="dn1" dataHost="host1" database="db1" />
<dataNode name="dn2" dataHost="host2" database="db2" />
<dataHost name="host1" ...>
<writeHost host="hostM1" ... />
</dataHost>
<dataHost name="host2" ...>
<writeHost host="hostM2" ... />
</dataHost>
</mycat:schema>
分库分表配置(简化):
<mycat:schema xmlns:mycat="http://io.mycat/">
<table name="user" dataNode="dn${0..1}.${db1..db2}" rule="sharding-by-murmur" />
<!-- 配置数据主机 -->
<dataNode name="dn1" dataHost="host1" database="db1" />
<dataNode name="dn2" dataHost="host2" database="db2" />
<dataHost name="host1" ... />
<dataHost name="host2" ... />
</mycat:schema>
全局表配置(简化):
<mycat:schema xmlns:mycat="http://io.mycat/">
<table name="global_table" primaryKey="id" dataNode="dn1" rule="auto-sharding-long" />
<dataNode name="dn1" dataHost="host1" database="db1" />
<dataHost name="host1" ... />
</mycat:schema>
生成全局唯一ID(