比较有效性能查询topGranularity按天和小时之间的topN

时间:2016-08-26 03:29:32

标签: java druid

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

我正在处理大型数据集。对于sam“queryGranularity”的2个案例(按天的segmentGranularity和按小时的segmentGranularity)的topN查询是“小时”。

案例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”慢。谁能解释一下这个案子呢?为什么按日分段比按小时分段?在商店数据段之间按天和按小时,我如何选择段类型?它怎么能影响我的查询? 非常感谢 !

1 个答案:

答案 0 :(得分:1)

您可以考虑以下事项来确定细分粒度:

  • 在实时摄取的情况下,段粒度将指示实时索引任务运行的时间。段粒度越粗,这些实时索引任务将运行的时间越长。实时任务将仅在它们存在时将数据保留在深层存储上因此,如果某个时间间隔内的实时任务的所有副本都被杀死,您将丢失该时间间隔内的数据.Hence段粒度会影响丢失数据的风险。 由于多个短任务将并行执行,因此细分段粒度将意味着中间管理器上的更多资源。
  • 细分粒度也会影响正在创建的细分受众群的大小。 在基本设置中,为每个时间间隔创建一个段文件,其中时间间隔可由segmentGranularity配置。 一般情况下,建议保持300-700 MB和最多500万行的分段大小。此建议也可用于确定分段粒度。如果生成的分段很少且很大,它将会影响查询的并行性,因为并行性的单位是一个段。当你在日级创建段时,大段有时可能会减慢查询速度。

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