有个业务查询需要关联很多表,索引怎么设计好

作者 code4j | 发布于2018年07月06日 | 阅读数:238

现在有个业务,有很多关联的关系。大致如下:
 

08C20808-A834-4d2a-B282-3838EDA33C1F.png

 
 
比如退款和账单对应订单是 N-1,保单对应服务项也是N-1,现在在mysql中就是6个表,每个N方的数据项都保留了1方的id。
 
现在想把这个查询关系放入es中,跨多表查询效率比较低。
 
查询条件有很多种组合,例如通过订单信息查退款,通过工资信息查询服务项,甚至通过保单查询订单信息。
 
这样的话我也要设计6个索引,每个N方绑定1方的id,查询的时候也要先查一个索引再查另一个索引.还有可能是多个条件来自多个表,比如根据订单时间和账单时间过滤等等。
 
感觉维护6个索引很麻烦,如果数据有更新,更新的就不止一个索引。而且es的目的是外置索引,提升查询效率的,这样一来很有可能一个查询要搜索1次1以上,感觉效率也不高。。这种业务一般怎么处理呢
已邀请:

yayg2008

赞同来自:

首先需要明确,ES擅长的是检索,而mysql才擅长关系管理。所以可以考虑二者结合,使用ES检索到对应ID后再回mysql通过关联ID join出需要的数据。
 
如果想只用ES来查,可以将数据整合成一个款表后写到ES,数据允许有冗余,尽量单index查询。

要回复问题请先登录注册