Elasticsearch数据分析二三事

Elasticsearch,最初的设计是分布式搜索引擎。由于可以支持对海量数据的快速地进行筛选和统计,再加上可增量索引,伸缩性强,社区活跃,有商业公司维护等特性,很多人用来做实时的数据分析。例如要统计一批商品的销售数据,一群人的身份特征等等,以前都需要使用Hive,Impala等跑任务,现在数据可以所见即所得。

实时的数据分析,和搜索不一样,会有以下的特点:

1.查询速度不需要太快。不需要毫秒级别返回数据,有时候10秒内返回数据,也是可以接受的

2.很难进行Cache。因为可能每次查询的数据不一样,查询的数据字段不一样

3.负载变化大。因为有时候可能只是简单Trems查询,有时候是嵌套的AGG查询,很难控制对服务器的压力

4.字段不可控。因为数据分析可能会随时加入新的数据集,会出现不同的字段,进行不同的操作

5.需要灵活使用脚本。大量的数据分析需要进行多字段之间的运算来进行统计,这个时候脚本就必不可少

6.需要更细的分词粒度。对文本进行数据分析,最重要的两步就是选择时间范围,筛选包含某些关键词的数据,进行AGG统计。使用分词算法,例如ansj之类的,可能导致部分关键词没有切出来无法筛选的问题

正因为这些特点,我们可能会遇到以下问题(TODO):

1.大量查询请求堆积

2.FieldData占用过多内存

3.不可用影响数据写入丢失

4.深分页

5.单个索引过大

6.需要更新大量数据

7.唯一字段修改

8.表管理,版本管理

9.分词问题

10.对分布广的字段进行AGG查询

11.复杂查询影响简单查询

一些最佳实践(TODO)

1.设置独立master节点

2.滚动重启

3.使用模板、动态字段

4.使用别名

5.使用父子文档

6.必要的监控

7.考虑中间件

8.使用2.3版本

9.如何备份

10.提高入库稳定性

11.硬件参考

12.性能指标

你可能感兴趣的:(Elasticsearch数据分析二三事)