铭毅天下

【死磕Elasticsearch知识星球】http://t.cn/RmwM3N9;【Elasticsearch微信公众号】铭毅天下;【死磕ElasticsearchQQ群】626036393...

Elasticsearch实战 | 必要的时候,还得空间换时间!

1、应用场景

实时数据流通过kafka后,根据业务需求,一部分直接借助kafka-connector入Elasticsearch不同的索引中。
另外一部分,则需要先做聚类、分类处理,将聚合出的分类结果存入ES集群的聚类索引中。如下图所示:
业务系统的分层结构可分为:接入层、数据处理层、数据存储层、接口层。
那么问题来了?
我们需要基于聚合(数据处理层)的结果实现检索和聚合分析操作,如何实现更快的检索和更高效的聚合分析效果呢?
这里写图片描述

2、方案选型

方案一:
只建立一个索引,aggs_index。
数据处理层的聚合结果存入ES中的指定索引,同时将每个聚合主题相关的数据存入每个document下面的某个field下。如下示意图所示:
这里写图片描述
方案二:
新建两个索引:aggs_index以及aggs_detail_index。
其中:
1)aggs_index存储事件列表信息。
2)aggs_detail_index存储事件关联的文章内容信息。
如下图所示:
这里写图片描述

3、方案对比

方案一优点:节省存储空间,只存储关联文章id,数据没有重复存储。
方案一缺点:检索、聚合慢,性能不能达标。
方案一后续的所有操作,都需要先遍历检索这一堆IDs,然后再进行检索、聚合分析操作。

操作实例如下(实际比这要复杂):
第一步:通过事件id,获取关联文章id列表;
第二步:基于关联文章id列表,进行检索和聚合操作。

POST  aggs_index/_search
{
  "_source": {
  "includes":[
    "title",
"abstract",
"publish_time",
"author"
    ]},
  "query":{
    "terms":{
      "_id":"["789b4cb872be00a04560d95bf13ec8f42c", 
      "792d9610b03676dc5644c2ff4db372dec4",
"817f5cff3dd0ec3564d45615f940cb7437", 
"....."]
    }
  }
}

步骤2当id数量很多时,会有如下的错误提示:

{
  "error": {
    "root_cause": [
      {
        "type": "too_many_clauses",
        "reason": "too_many_clauses: 
        maxClauseCount is set to 1024"
      },

。。。

方案二优点:分开存储,便于一个索引中进行检索、聚合分析操作。
空间换时间,极大的提升检索效率、聚合速度。
方案二缺点:同样的数据,多存储了一份。
其对应的检索操作如下:

POST  aggs_index/_search
{
  "_source": {
  "includes":[
    "title",
"abstract",
"publish_time",
"author"
    ]},
  "query":{
    "term":{
      "topic_id":"WIAEgRbI0k9s1D2JrXPC"
    }
  }
}

是真的吗?
用事实说话:
以下响应时间的单位为:ms。
方案一要在N个(N接近10)索引,每个索引近千万级别的数据中检索。
这里写图片描述
这里写图片描述

4、小结

  • 由以上图示,对比可知,方案二采取了时间换空间的策略,数据量多存储了一份,但是性能提升了10余倍。
  • 在实战开发中,我们要理性的选择存储方案,在磁盘成本日渐低廉的当下,把性能放在第一位,用户才能用的”爽“!

这里写图片描述

2018-03-11 12:50 思于家中床前

作者:铭毅天下 (公众号同名)
转载请标明出处,原文地址:
http://blog.csdn.net/laoyang360/article/details/79515295
如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

阅读更多

扫码向博主提问

去开通我的Chat快问

wojiushiwo987

博客专家

和你一起,死磕ELK Stack!
  • 擅长领域:
  • ES
  • ELK
  • bigdata
版权声明:本文为博主原创文章,未经博主允许不得转载。转载请务必加上原作者:铭毅天下,原文地址:blog.csdn.net/laoyang360 https://blog.csdn.net/wojiushiwo987/article/details/79515295
所属专栏: 深入详解Elasticsearch
上一篇Elasticsearch全量数据增量遍历实现原理
下一篇Elasticsearch6.2.2 X-Pack部署及使用详解
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭