gpt4 book ai didi

performance - Apache Drill 对 SQL Server 的性能不佳

转载 作者:行者123 更新时间:2023-12-03 20:50:07 28 4
gpt4 key购买 nike

我尝试使用 apache-drill 运行一个简单的 join-aggregate 查询,但速度并不是很好。我的测试查询是:

SELECT p.Product_Category, SUM(f.sales)
FROM facts f
JOIN Product p on f.pkey = p.pkey
GROUP BY p.Product_Category

事实大约有 422,000 行,产品有 600 行。分组返回 4 行。

首先,我在 SqlServer 上测试了这个查询,并在大约 150 毫秒内得到了结果。

使用钻头,我首先尝试直接连接到 SqlServer 并运行查询,但速度很慢(大约 5 秒)。

然后我尝试将表保存到 json 文件中并从中读取,但速度更慢,所以我尝试了 Parquet 文件。

我在大约 3 秒内在第一次运行中得到了结果。下一次运行大约是 900 毫秒,然后稳定在大约 500 毫秒。

从阅读中,这是没有意义的,钻应该更快!
我试过“刷新表元数据”,但速度没有改变。

我通过钻取命令行在 Windows 上运行它。

知道我是否需要一些额外的配置或其他东西吗?

谢谢!

最佳答案

Drill 非常快,但它是为大型分布式查询而设计的,同时连接多个不同的数据源……而您并没有那样使用它。

SQL Server 是最快的关系数据库之一。数据高效存储,缓存在内存中,查询在单个进程中运行,因此扫描和连接非常快。相比之下,Apache Drill 有更多的工作要做。它必须将您的查询解释为分布式计划,将其发送到所有钻头进程,然后这些进程查找数据源,使用连接器访问数据,运行查询,将结果返回到第一个节点进行聚合,然后您接收最终输出。

根据数据源的不同,Drill 可能必须读取所有数据并单独对其进行过滤,这会增加更多时间。 JSON 文件很慢,因为它们是逐行解析的冗长文本文件。 Parquet 速度要快得多,因为它是一种二进制压缩的面向列的存储格式,专为高效扫描而设计,尤其是当您只访问某些列时。

如果您在一台机器上存储了一个小数据集,那么任何关系数据库都将比 Drill 更快。

考虑到它需要做多少工作才能为您提供它提供的灵活性,Drill 使用 Parquet 在 500 毫秒内为您提供结果的事实确实令人印象深刻。如果您只有几百万行,请坚持使用 SQL 服务器。如果您有数十亿行,那么请使用 SQL Server 列存储功能以具有出色压缩和性能的列格式存储数据。

在以下情况下使用 Apache Drill:

  • 拥有数十亿行或更多
  • 让数据分布在多台机器上
  • 将非结构化数据(如 JSON)存储在没有标准架构的文件中
  • 想要将查询拆分到多台机器上以更快地并行运行
  • 想要访问来自不同数据库和文件系统的数据
  • 想要连接这些不同数据源的数据
  • 关于performance - Apache Drill 对 SQL Server 的性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39583012/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com