Open Skycrab opened 8 years ago
是的。目前这一块确实存在问题。正在想办法解决。
恩,我明白你的意思。但如果分库的话,一个库一张表,要不停的use db。一样会很复杂,是不是?
目前我正在着手重构sql parser,需要一段时间完成。:)
我刚接触本项目,还没看完全部代码,但是我的理解是,代码应该为每一个db里的database创建一个连接池,并复用该连接池,在项目本身,backendConn 不应该使用 use databasename来切换database(这样成本比维护连接池高多了)
也就是我的理解是,url + dbname 才是一个backendConnection
另外可以参考下cobar的设计,其实分表的意义不大,带来的维护成本很高,可以考虑舍弃
@forestkeeper 目前的连接池设计就是你说的这样,其实你仔细想想你这种方案的实现,也是比较麻烦的。一张表一个database,维护database级别的连接还是比较复杂的。分表的话,如果能够重构好sql parser就问题不大。而且管理比较简单。
sql parser长期来看,维护和升级几乎是无底洞,在不替换表名大前提下,sql parser可以写的非常简单(只需要解析出主体),这样的一个大好处就是解析非常节省cpu
你说的确实是分库的一个很明显的优点,但如果只分库的话,基本上很难支持join。因为会涉及到跨库join
跨库的join,可以考虑两个方法:
是吧。但是如果分表的话,小表广播就很好做了,因为一个实例就一个分表数据库
啊,一年了……这个解决了么
AND
month
.snid
= 0 AND NOT (month
.mau
= 0 )) ORDER BYmonth
.ds
ASC kingshard 会替换成 and snid = 0 and not (month.mau = 0)) order by month.ds asc 其中month.mau没有去掉表名。order by month.ds kingshard会报:Unknown column 'month.ds' in 'order clause' 我们用的orm, order by,group by都带表名的,请问有什么方法解决?