作者回复: 你说的多表,是指同一个表在不同服务器上的分片吗?
如果一个SQL是涉及多个分片的,解析了SQL以后,是可以针对每个分片重新生成SQL的。但这个需要对语义更深的理解,要把SQL语句变成关系代数的运算(选择、投影、笛卡尔积、Union等),这样就知道如何正确的重组成多个SQL了。
作者回复: 我最近其实在构思写一个分布式数据访问的工具。跟MyCat的定位会不大相同,是想整体上把数据访问这件事情,对应用透明化。野心有点大。
因为现在很多用到数据库的应用,其水平扩展能力都困在了数据库这个点上。这个问题不解决,所谓云原生就是在忽视房间里的大象。
我看资料,已经有一些分布式数据库的商业产品。但要像使用一个单一的数据库一样的使用它,还是有点困难。
我整理一下这方面的思路,会跟大家分享的。
作者回复: 每个领域都会有这样的场景。
无论是上层的应用软件(如工资表软件),还是下层的基础软件(如数据库软件)。只要想让软件的功能有一定灵活性的、通用性的,都需要编译技术。
曾经在Lisp圈里(参见《黑客与画家》),有人说,每个软件做到极致的时候,里面都会包含一个拙劣的Lisp实现。他的意思是,每个软件做到极致,都要有灵活定制的能力,也就是需要编译技术的支持。
具体来说,每个领域不一样,所以举例子也只能举自己熟悉领域的例子。
我熟悉的领域:
1.企业软件:比如ERP软件等。定制能力是否强大,就是优秀的企业软件和平庸的企业软件的区别。现在的企业软件在实施的时候,成本往往很高,就是这方面比较差。我目前手头在做的一门语言,就是在解决这个领域的问题。
2.中间件/基础软件:这里肯定需要。例子太多了。
3.GIS,也算一种基础软件吧,也有编程能力。
其他同学,有的熟悉游戏领域,有的在AI领域,各自都有不同的场景。
作者回复: SQL的部分展开确实挺多的。
要不然跟极客时间合作一本书,收集大家的需求,把一些细节更多的展开?
或者后面做课程升级的时候,考虑扩展一下这部分。
作者回复: https://github.com/RichardGong/PlayWithCompiler/blob/master/lab/db/src/main/playdb/SQLVisitor.java
我在文稿中加一下链接...
作者回复: 嗯。这种delete语句肯定比较危险。