通过上一篇的学习,我们可以将同一类型的数据,同时写入到不同库的同名表中,实现了数据分片。
但是通过对数据表的观察,发现在不同分片中的数据记录,存在主键ID重复的情况:
主键出现重复,这对于我们来说,显然是不能接受的。
那么,我们就需要一个可以确保全库主键唯一的方法。
修改配置
在 properties 配置文件中增加配置信息:
- 设置需要采用主键生成器的数据表,及其对应的主键列名
- 设置主键的生成算法
spring.shardingsphere.sharding.tables.orders.key-generator.column=id
spring.shardingsphere.sharding.tables.orders.key-generator.type=SNOWFLAKE
修改实体类
在实体类中设置id属性为自增
修改测试程序
既然我们已经使用了主键生成算法,那么在创建实体类时,就不需要开发人员自己去设置主键数据, 因此,不应在程序中对 orders 表主键 id 进行赋值,改由 shardingjdbc 进行自动赋值。
运行程序
进入数据库中查看结果时,数据表的 id 列的数据是由 shardingjdbc 自动生成的。