[操作系统]如何设计百万级商品数据实时同步的秒级搜索系统?( 三 )
本文插图
canaladapter ES 配置
②配置多表关联
进入 canaladapter/conf/es 目录 , vim mytest_user.yml , 编辑多表关联配置:
本文插图
多表关联配置
注意 , sql支持多表关联自由组合, 但是有一定的限制:
- 主表不能为子查询语句 。
- 只能使用 left outer join 即最左表一定要是主表 。
- 关联从表如果是子查询不能有多张表 。
- 主 sql 中不能有 where 查询条件(从表子查询中可以有 where 条件但是不推荐, 可能会造成数据同步的不一致 , 比如修改了 where 条件中的字段内容) 。
- 关联条件只允许主外键的'='操作不能出现其他常量判断比如:on a.role_id=b.id and b.statues=1 。
- 关联条件必须要有一个字段出现在主查询语句中比如:on a.role_id=b.id 其中的 a.role_id 或者 b.id 必须出现在主 select 语句中 。
- ElasticSearch 的 mapping 属性与 sql 的查询值将一一对应(不支持 select *) 。
- 比如:select a.id as _id , a.name , a.email as _email from user , 其中 name 将映射到 es mapping 的 name field , _email 将映射到 mapping 的 _email field , 这里以别名(如果有别名)作为最终的映射字段 。 这里的 _id 可以填写到配置文件的 _id: _id 映射 。
以官方的 biz_order.yml 为例 , vim biz_order.yml , 配置父子文档映射:
本文插图
配置父子文档映射
④在 ElasticSearch6 中 , 建立 index 和父子文档映射关系
进入 Kibana 页面 , 点击 Dev Tools , 执行如下命令 , 即可建立索引及父子文档映射:
本文插图
建立 index 和父子文档映射
其中 , ES6 和 Kibana 的安装 , 在此无特别配置 , 不做赘述 。
⑤启动 canal adapter
进入 canaladapter/bin 目录 , 执行 ./startup.sh , 启动 canal adapter , 观察 logs/adapter/adapter.log 日志文件 , 手动在搜索系统数据库新增一条记录 , 看是否会打印如下日志 , 如打印则表示配置成功 。
本文插图
正确配置 adapter 日志示例
运行结果
现在 , 我们可以通过 Kibana 来执行 DSL 语句来查询看看 。
我们事先已在商家系统中增加了一个“肯德基”商店 , 然后在商品系统中添加了“西红柿”和“新鲜西红柿”2 个商品 , 并将商品关联到“肯德基”上 。
接着我们查询“肯德基”或者“西红柿” , 得到以下是查询的结果(去除了 ES 默认字段):
本文插图
通过 DSL 查询的结果
由图可见 , 我们可以通过商家名查询商品 , 也可通过商品名查询商店和商品 , 并且 Canal 支持数据的实时增删改 , 所以 ES 的数据也会与商家系统和商品系统保持一致 , 同时数据结构包含商家及对应的商品 , 满足业务需求 。
总结
至此 , 基于 Canal、Kafka、MySQL8、ElasticSearch6 技术的商家商品搜索系统基础框架搭建完成 。
我们采用 canal deployer 实时读取商家、商品系统的 MySQL 数据库 Binlog , 并发送至 Kafka 。
接着由 canal adapter 消费 Kafka , 并将 binlog json 数据进行多表关联、父子文档映射 , 最后存储到 ES6 中 , 供上层搜索服务调用 。
推荐阅读
- 【军武次位面】这款国产火箭炮性能优秀,模块化设计功能丰富,足以让导弹失业
- 人民网@【战“疫”说理】疫情防控中如何有效实现经济复苏?
- 索尼■微软新Xbox太强所致?消息称索尼将重新设计PS5并推迟发售
- 『车家号』高低功率如何选?后期改装就能“低变高”了吗?,同一款发动机
- 手机、眼镜如何消毒?清洁要从细节做起
- 「快科技」小米全面屏电视Pro 75英寸亮相:4K全面屏设计 5999元
- 『音频』iOS如何导入百度云的音频(易剪和易剪多轨版)
- 十大突破性技术-NMN,叫你如何选择最好的NMN
- 妙家影视■如何计算低压开关柜铜排用量?这是我见过最漂亮的文章!
- 「史今中外s」潜伏大陆40年没被发现,结局如何?,女特务为隐藏身份嫁给农民
