分库分表有哪些常用算法?
作者:程序员马丁
在线博客:https://open8gu.com
note
大话面试,技术同学面试必备的八股文小册,以精彩回答应对深度问题,助力你在面试中拿个offer。
回答话术
1. 哈希取模
先根据配置的分片键字段值进行哈希计算,然后再对哈希值进行取模运算后得到最终的分片标识,最后系统再根据分片标识将数据路由到对应的数据库分片节点。
2. 行表达式
ShardingSphere 支持使用 Groovy 表达式实现对 SQL 执行语句中的 = 和 IN 操作的分片支持。
这种虽然便利,但是限定仅支持单一分片键。
对于简单的分片算法,只需通过简洁的配置即可避免繁杂的 Java 代码开发。例如,通过表达式 t_user_$->{id % 15}
,实现了 t_user 表根据 id 取模 15 进行分片,将数据分布在 t_user_0 到 t_user_15 张表中。
3. 范围分片
可以根据主键范围、创建时间范围等条件将数据分配到不同的表中,确保每个表的数据量在可控范围内,以避免单表数据过大导致性能下降。
4. 自定义类
开发者需要自定义一个 Java 类,该类实现 ShardingSphere 特定的接口,以实现分片逻辑。这个自定义类将作为分片算法的实现,并通过配置指定给 ShardingSphere 具体分片算法配置。
在这个自定义类中,可以定义逻辑表达式的计算方式,例如,通过取模、范围判断等方式实现数据的分片。
使用自定义类分片算法的好处是,开发者可以根据具体的业务逻辑定制分片策略,以满足特定需求。这种方式相对于预定义的分片算法更加灵活,可以更好地适应复杂的业务场景。