ElasticSearch 分析查询

ElasticSearch Analytical queries

我正在评估使用开源技术为分析应用程序提供动力的几个不同选项。其中一个选项是使用 ElasticSearch,尽管我还没有找到任何公司使用它进行大规模实施分析的例子,因此我的问题在这里。

对于 1B-10B 点的数据集,ElasticSearch 有什么限制(如果有的话,或者可能吗?)?例如,拥有像 Google Analytics 这样的功能集。

这是一位似乎对大量数据进行分析的用户 - https://digitalgov.gov/2015/01/07/elk - 以及他们所做工作的描述,包括缺点。

对于像您这样开放式的问题,使用 Elasticsearch 没有非黑即白的答案。记录的数量并不是一切:我们在谈论多少磁盘space,有多少节点,多少索引,每个分片的数量,你需要什么样的分析,硬件规格等等。两件事从您提到的数据中可以肯定:您需要专用的主节点,更重要的是好的客户端节点,并且根据查询和并发搜索计数,您将需要更多或更少的节点。

在 Elasticsearch 5 中,客户端节点 称为协调节点,但它具有相同的作用。 我能想到的一个限制是这种协调节点的heap/RAM内存。Elasticsearch节点的堆不应该设置值 大于 ~30GB 由于 JVM 的垃圾收集周期较长(需要清理的内存越大,花费的时间越多,节点越不可用)。在 GC 期间,该 JVM 上没有其他任何东西运行。所以你可能会受到内存大小的限制。

我说过您很可能需要协调节点,因为大量聚合(这可能是分析平台中最常用的功能)将在查询的最后阶段使用 cpu 和内存从所有涉及的分片收集结果并执行最终排序和聚合。因此,它将需要比仅用于聚合的普通数据节点更多的内存。

我怀疑单个聚合是否会使用这么多 GB 的内存,但如果正在使用的 query/aggregation 是以鲁莽的方式构建的,理论上它可以使用它。 取决于有多少并发搜索以及它们使用了多少内存 可能需要或多或少的协调节点 以便 GC 周期不是很频繁。

底线:我认为这是可能的,但需要一些常识(请参阅我关于鲁莽聚合的评论)和一些尽可能接近现实的关于负载的估计。

Google 分析专家:

  • 易于安装
  • 可用于多种环境(例如网络、移动、其他)
  • 自定义数据收集

Google 分析缺点:

  • 自定义报告受到限制
  • 升级到 Premium 很昂贵
  • 需要持续训练
  • 将数据分成较小的样本以处理大样本问题

ElasticSearch 优点:

  • 按设计分发
  • 更容易横向扩展
  • 擅长全文检索
  • 快速索引和查询

ElasticSearch 缺点:

  • 不是关系数据库,因此无法从外键约束等方面受益
  • 数据一致性可能会受到影响
  • 无内置身份验证或授权系统