对项目的回顾。
背景
有一个方便运营选品的后台。后台的商品都是消息流消费调用选品后台的接口存了一份商品。后来,商品数量超过了1000万。再按照上面表单查询就根本不可能了。主要是有模糊查询就慢死。
那么就上搜索引擎吧?Solr与ElasticSearch,看了看相关对比文章。就用ElasticSearch吧。
思考的问题点
1.mysql的结构怎么和ES中的结构对应起来。如:choose库中的goods表中的商品在es中怎么表示?
上面的表单是连表查的。所以灌入数据也是连表后的结果。保证es存的跟不用es从数据库查的字段保持一致。
2.es中的数据是怎么存储的?存储到哪个位置,可否自定义?怎么备份数据?
es有副本。实际上我们就是单机。
3.mysql中的CURD在es中怎么体现?
手册中有了
4.如果es服务挂掉,怎么让请求去访问mysql,或者其它的容错方案?
如果es走不通。就切mysql。实际上这步没有具体做。es用supervisor跑。
5.怎么把mysql中的历史数据批量导入到es中,导入后怎么校验数据的准确性?
6.如果新增数据或者修改数据怎么保证es和mysql的双写,即数据一致性问题?
先写库,后写ES
7.es怎么和laravel框架结合?
composer 安装 https://www.elastic.co/guide/cn/elasticsearch/php/current/_installation_2.html
8.使用es后怎么保证和其它业务服务的隔离,防止es挂掉之后会影响到别的访问业务?
实际上,只有这个表单用了。
OK,开干
1.composer安装
2.封装一个单例。把curd方法写好。
3.es的index名就跟库名,type就跟那个商品表名一样。对应的商品操作写完。
4.脚本跑数据。灌入。
5.消息流消费的接口中。先入库后,入es。
数据的同步就是,在接口中,同步做了入库跟如es。
没有用Canal。技术用不用视情况而定。
kibana
对了kibana是个好东西。也装了。
用console查数据。另,如果你想看商品添加用图形观察什么时间新增了多少数据,也可以自己弄visualize。
参考资料:
《Kibana 用户手册》https://www.elastic.co/guide/cn/kibana/current/index.html
《Elasticsearch: 权威指南》https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
《Elasticsearch Reference [6.0] 》https://www.elastic.co/guide/en/elasticsearch/reference/6.0/index.html
《ElasticSearch + Canal 开发千万级的实时搜索系统》https://www.cnblogs.com/chanshuyi/p/6669006.html