1:shardingjdbc 是什么,它能做什么,解决了什么问题?
现实的问题是mysql单表存储是有上线的,因为mysql采用的是 B+ 树类型的索引,在数据量超过阈值的时候,索引的持续变大,会导致访问磁盘的IO次数增加 【对于传统机械硬盘(HDD),随机 I/O 操作的延迟通常在几毫秒到几十毫秒之间。而对于固态硬盘(SSD),随机 I/O 操作的延迟通常在几十微秒到几毫秒之间。NVMe SSD 提供了更高的性能,其随机 I/O 操作延迟可能低至几十微秒。】,进而导致查询性能下降,从而导致系统越来越慢,甚至直接崩掉; 所以数据进行数据拆分,即把数据通过不同的形式放到不同的地方;一般通常有两种拆分方法:水平拆分,垂直拆分;但是同时这种调整,有带来了很多新的挑战,这个框架就是来解决这些新引入的问题的;
详情查看: 数据分片 :: ShardingSphere
主要提供一下功能:数据分片,读写分离,数据库流量治理,分布式事务,数据迁移;这些功能都是和这个框架最初解决的问题是强相关的;
2:shardingjdbc他不能做什么?包含实验性的功能
**跨库事务:**ShardingSphere 不支持跨多个数据库的分布式事务(XA 事务)。如果事务涉及多个数据库,可能需要考虑其他解决方案,如基于消息队列的最终一致性。
**子查询:**ShardingSphere 对子查询的支持有限。例如,它不支持子查询之间的关联操作,如
JOIN
、GROUP BY
和ORDER BY
。**全局表连接:**ShardingSphere 不支持全局表与分片表之间的连接查询。此外,如果连接查询涉及多个分片表,可能会导致性能下降。
**部分 DDL 操作:**ShardingSphere 不支持部分 DDL 操作,如
ALTER TABLE
、TRUNCATE TABLE
等。在需要使用这些操作时,可能需要绕过 ShardingSphere 直接对数据库执行操作。**复杂 SQL 查询:**ShardingSphere 对于复杂 SQL 查询的支持有限,特别是涉及多表连接、子查询、公共表表达式(CTE)以及窗口函数等高级特性时。
**数据库特定功能:**ShardingSphere 支持多种数据库,但可能无法覆盖所有数据库的特定功能。在使用特定数据库功能时,可能需要考虑兼容性和支持情况。
3:shardingjdbc内部的处理机制是什么样的?
sharding-jdbc分库分表-使用及原理 - 掘金
4:shardingjdbc如何支持limit,group by,order by的,有什么高效的算法吗?,会有什么不足吗?
分页查询的好文:业界难题-“跨库分页”的四种方案
一次shardingjdbc踩坑引起的胡思乱想 - 掘金
5:如何读懂shardingjdbc源码?
ShardingJDBC源码阅读(三)解析 - 掘金