java全量数据加载到内存中_Elasticsearch全量数据增量遍历实现原理

0、需求

针对凤凰网财经版块的新闻数据和评论数据, 1个索引存储采集凤凰网财经版块的新闻数据;1个索引存储相关的财经数据评论结果。

统计:

1)某条新闻的评论数的多少?

2)某条评论属于哪条新闻?

3)当前已采集数据的所有评论、评论数汇总,按照评论数逆序排序,以便于图形化展示。

1、问题分解

1.1 数据如何存储,方案选型?

方案一:类似需求,1个索引ifeng_index存储新闻数据;1个索引ifeng_comm_index存储评论数据。

二者之间通过唯一值建立关联:评论数据中其来源新闻的唯一id值。

优点:数据分开存储,不存在交叉问题;

缺点:如果实现需求3),会非常复杂,做全局两通道的遍历和统计。

方案二:借助2.X-5.X版本ES中特有的父子文档实现。

注意:由于6.X版本以后,一个索引下只能存储一个type,所以父子文档也就不再可以使用。

所谓父子文档,可以理解为:

1)统一索引下的两个type,1个父type存储凤凰网新闻数据;1个子type存储凤凰网评论数据;

2)其中子type的Mapping定义要特殊处理;

3)其中子type的每条凤凰网评论数据都要关联唯一的父type的相关ID值。

优点:可以以相对较小的复杂度满足需求1)、2)、3)

缺点:以上方案二,ES6.X+都不再适用。

注意:

ES6.X已经移除父子文档的相关实现:http://t.cn/RE07V5A

但是转换为新的join的实现方式:http://t.cn/RE07IG1

综上分析,我是5.X的版本,采取方案二。

1.2 所需要技术支撑

1)父子文档技术

父子文档定义:

用于两个索引之间通过某一个特殊字段建立关联的场景。

在1对多的场景,尤其适用。如:1个父文档下有多个子文档。

缺点: 查询速度会比同等的嵌套查询慢5到10倍,详见:http://t.cn/ROir5rQ

父子文档实现:

建立父-子文档映射关系时只需要指定某一个文档 type 是另一个文档 type 的父亲。 该关系可以在如下两个时间点设置:1)创建索引时;2)在子文档 type 创建之前更新父文档的 mapping。

2)全局遍历技术

借助Scroll实现。之前的博文也有说明,http://t.cn/RE068mD

【scroll机制】:相对于fro

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值