有很多朋友提到关于对其他语言的支持,因为 Shariding-JDBC 是基于 Java 提供的 JDBC 规范的接口所开发,因此目前暂时不支持 Python、Node.js 等。
但其核心的解析、路由、结果归并等功能模块和基于 Proxy 版本开发几乎是一致的。因此,未来我们有打算提供 Shariding-JDBC-Server 版本,将会支持全语言。
有朋友看到我们在考虑开发 Sharding-JDBC-Server,以为目前的 Sharding-JDBC 模式遇到了某些不可解决的问题。其实 Shariding-JDBC 以当前的定位来说,没有遇到不可解决的问题,但如果想做的更多(前面提到的数据迁移,分布式事务,元数据管理等),则需要向 Proxy 的方式靠拢。Shariding-JDBC 想提供两种不同的使用方式,给使用者更自由的选择。
还有就是对 SQL 语句的支持。由于时间和精力有限,目前无法做到全 SQL 的兼容。我们现阶段的目标是尽量支持 OLTP 最常用的 80% 的 SQL。目前支持聚合、分组、排序等查询。暂时不支持 distinct,对 or 的支持也不是特别完善,但是 distinct 和 group by 可以互换,or 也可以用 in 代替。因此绝大部分 SQL 经过修改是可以使用的。
有朋友提到,既然 distinct 和 group by 可以互换,or 可以用 in 代替,那么是不是可以考虑直接在 SQL 解析的时候自动切换?
对于这个问题,虽然这样做在技术上是可行的,但是设计上来说还有待商榷。
如果已经做了 distinct 和 or 的解析,其实完全没有必要改写 SQL,直接支持就可以了。而改写 SQL,对于 DBA 的调试就比较痛苦,因此我们希望做到尽量不修改 SQL,仅修改必要的部分,如:分表的名称、avg 转化为 count 和 sum、limit 的 offset 和 rowCount。
对于过于复杂的 SQL,如子查询等,不一定适合在大数据量的分片数据库中使用,也许需要重新梳理。
未来我们也会对 SQL 兼容性这块持续进行提升。
目前 Sharding-JDBC 仅支持 MySQL,对其他数据库的支持(比如 Oracle)也正在进行。现在 New SQL Parser 正在进行中。计划在这个版本发布对 Oracle、PG 以及 SQLServer 的支持。对于 Oracle 以及 SQLServer 主要的支持在于特殊关键词识别和分页。
New SQL Parser 确实工作量比较大,虽然目前整体代码已经梳理得差不多了,但想稳定的提供服务还需要一些时间。预计 4 月份提供 snapshot,6 月份提供稳定版。
New SQL Parser 在 Git 的 parser 分支持续更新中,欢迎继续关注。