背景:项目重构,有些负责查询想要上 ES 。之前没有使用 ES 的项目经验,网上简单的学习了一下 es 的搭建和一些 api 的调用。 但是找到的学习资料实战部分大多都是单表的数据,也都是偏简单的一些需求。所以对 es 在实际项目中的使用方式有些疑惑点,希望大佬们可以指点一二。
问题 1
如果所涉及到的查询业务只有单表,为了减少业务代码的开发。目前了解到的中间件是 canal ,监听 binlog ,将数据同步到 ES 中。
想问下大家,实际使用中也是这种思路吗。
问题 2
如果涉及到多表关联查询,是不是只能通过业务代码往 ES 里面灌数据。
举个实际的场景:
比如:学生表 student 中有 id ,code ,name ,age ,address ,schoolname ,tel ... 等字段
年级表 class 中有 id ,name ...等字段
还有其他的一些基础数据表。
现在想实现一个学员列表的需求。
列表中,会以学生为维度,展示其他很多表中涉及到的字段。
搜索条件有:学员姓名,学员编码( code ),学校,入学时间等字段。
如果基于 mysql 实现,可能需要多张业务表关联查询,甚至有些字段可能一个 sql 查不出来,需要在查询出来的结果中遍历,单独再去查询某个字段,然后赋值。这样的话,表数据比较多查询效率很慢。
如果基于 ES 来实现,我的思路是:
[ol]
[/ol]
总结:查询字段放 es ,表格字段查 mysql
我不知道我的实现思路是否使用合理和正确。如果合理的话,感觉代码的侵入性太强了。比如上述问题二,如果修改了某个基础标的数据,我还要对应的修改 es 中的数据。可能系统里我都不知道都有哪些地方修改基础数据。
希望大家可以提供一些实际工作中应对以上场景时的解决思路。如果有一些参考的教程资料关于 es 的也可以提供。
感谢大家