【问题标题】:Is there a way to optimize this CrateDB relational query?有没有办法优化这个 CrateDB 关系查询?
【发布时间】:2018-09-03 16:39:24
【问题描述】:

我正在使用从 Web 应用发送的 8000 万个事件的数据集来测试 CrateDB,它既是一个规范化的关系解决方案,也是一个非规范化的单一数据库解决方案。

我将所有 8000 万个非规范化事件导入到一个表中,并运行以下聚合查询:

select productName, SUM(elapsed)/60 as total_minutes from denormalized
where country_code = 'NL' AND eventType = 'mediaPlay' 
group by productName
order by total_minutes desc
limit 1000;

查询耗时 0.009 秒。哇扎! CrateDB 速度极快!

然后我将会话范围的文档导入到一个名为“sessions”的表中,并将每个会话中的所有单个事件文档导入到另一个名为“events”的表中,然后运行以下查询:

select e.productName, SUM(e.elapsed)/60 as total_minutes from sessions s
join events e ON e.sessionGroup = s.sessionGroup
where s.country_code = 'NL' AND e.eventType = 'mediaPlay' 
group by e.productName
order by total_minutes desc
limit 1000;

耗时 21 秒。

我的问题是,有没有办法获得更快的关系性能,可能是通过创建索引或以某种方式更改查询?

切线思想: 我们一直在使用 Elasticsearch 进行分析,显然对数据进行了非规范化,而且速度非常快,但 CrateDB 似乎提供了 Elasticsearch 所做的一切(对非规范化数据的快速查询、集群、动态模式、全文搜索),以及以下额外优势:

  • 更好的 SQL 支持
  • 在小型数据集上部署关系解决方案的选项(在一个数据库上进行标准化非常棒,对于了解 SQL 的开发人员而言,无需上下文切换或加速)。

【问题讨论】:

    标签: elasticsearch cratedb


    【解决方案1】:

    您使用的是哪个 CrateDB 版本?如果它是 https://crate.io/a/lab-notes-how-we-made-joins-23-thousand-times-faster-part-three/。

    【讨论】:

    • 版本为 3.0.5。
    • 连接查询将命中与普通查询相同的索引(CrateDB 默认为每个字段创建索引),因此没有什么可以改进的。由于连接和聚合/分组可以使用集群中的所有节点并行连接/聚合/分组,因此可以选择横向扩展来提高查询速度。
    • 谢谢!很好的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2013-01-01
    • 2021-10-27
    相关资源
    最近更新 更多