segmentGranularity 按天和按小时比较有效性能查询topN

Comparison effective performance query topN between segmentGranularity by day and by hour

我在 https://groups.google.com/forum/#!topic/druid-user/SYWcqcr504k 上问了我的问题 但是没有人帮助我解决这个问题。

我正在处理大型数据集。在 2 种情况下的 topN 查询(​​按天的 segmentGranularity 与按小时的 segmentGranularity)在 sam "queryGranularity" 上按 "hour".

案例 01:按天

"granularitySpec" : {
        "type" : "uniform",
        "segmentGranularity" : "day",
        "queryGranularity" : "hour",
        "intervals" : ["2016-08-22/2016-08-23"]
      }

案例02:按小时计算

"granularitySpec" : {
        "type" : "uniform",
        "segmentGranularity" : "hour",
        "queryGranularity" : "hour",
        "intervals" : ["2016-08-22/2016-08-23"]
      }

但是 "segmentGranularity" : "day" 的查询时间比 "segmentGranularity" : "hour" 慢。任何人都可以向我解释一下这个案例吗?为什么按天分段比按小时分段慢?在按天和按小时存储数据分段之间,如何选择分段类型?它如何影响我的查询? 非常感谢 !

您可以考虑这些因素来决定细分粒度:

  • 在实时摄取的情况下,段粒度将决定实时索引任务的时间 run.The 段粒度越粗,这些实时索引任务 run.Realtime 任务将数据持久化的时间越长深度存储仅在它们完成时因此,如果一个时间间隔内实时任务的所有副本都被杀死,您将丢失该时间的数据 interval.Hence 段粒度会影响丢失数据的风险。 更细的段粒度将意味着更多的资源分配给中层管理人员,因为多个短任务将并行执行。
  • 分段粒度也会影响正在创建的分段的大小。 在基本设置中,为每个时间间隔创建一个段文件,其中时间间隔可由 segmentGranularity 配置。 一般来说,建议将段大小保持在 300-700 MB 和最多 500 万 rows.Hence 此建议也可用于决定段 granularity.If 非常少和大的段正在产生,它将影响查询的并行度,因为并行度的单位是 segment.Hence 大段有时会减慢查询速度,这可能是您在天级别创建段时的情况。

我还建议您查看查询节点(即历史和实时)发出的各种德鲁伊指标,以找出查询速度较慢时的瓶颈。 有关各种指标,请参阅 http://druid.io/docs/latest/operations/metrics.html