ShardingSphere
用处:sharding是分片的意思,sphere是球(生态的意思)。用来做分库分表的生态的。一个订单表太大,查询会很慢,要分表,分为3个表,这样查询会快一点,所以有了分库分表。
原理:对sql语句进行拦截,然后根据分库分表算法路由到具体的表,如order表的sql语句,拦截,根据orderId取模3位,路由到order1、order2、oder3表上。
还支持分布式、事务等。
shardingSphere路由的时候会给数据生成全局唯一cid,这里涉及分布式id生成器,ShardingSphere一般用的是雪花算法。
雪花算法
组成:时间戳+机器进程码+序列号
雷区:
1、每台电脑的时间戳不是完全相同的,有的快有的慢。解决方案:
时间回拨,记录上次的时间,如果这次的时间小于上次的时间,有问题,需要处理,处理方式很多:
- 比如停止下线程,再进行时间分配,这样时间就补上来了。
- 又比如,用ntpd来同步下时间。
直接从第三方来获取时间戳,保证时间戳从同一个地方获取
2、序列号不递增,当时间戳一样的时候序列号才递增,时间不同,序列号又从0开始,这导致序列号都比较小,分库分表都只能分到少数的表。解决方案就是不要时间戳一样才递增
分布式id生成器
现有的分布式id生成器有美团的Leaf、还有CosID。ShardingSphere里集成了CosID。