突然想到一个有意思的事情,elasticsearch目前已经广为使用,其基于分片的的多节点集群提供了良好的容灾与极高的读写性能,得到了诸多大厂的青睐。
那么,同样是基于主键hash路由的mysql ndb cluster,同样拥有较高的性能和可容灾性,为什么ndb没有得到广泛使用,反而大厂都劳心劳力去开发各种分库分表中间件呢?
我想这其中主要的点在于两者使用方式的不同,elasticsearch没有支持多索引 join查询吧?即使是变种的parent-chiled记录,也是要基于parent_id将父子记录同时路由到相同分片的。你能想象mysql作为一个关系数据库,为了使用ndb获得高性能而不能join关系吗?如果在ndb上join了,那还能不能获得ndb该有的高性能呢?这是舍本逐末了。当然,ndb的巨大内存使用也会使一些使用者望而却步,但这个是次要原因。
另外,我想,如果ndb能支持定制化的路由,将相关数据路由到相同data节点相同序号分片,那这将是极好的。