- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 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
最佳答案
Drill 非常快,但它是为大型分布式查询而设计的,同时连接多个不同的数据源……而您并没有那样使用它。
SQL Server 是最快的关系数据库之一。数据高效存储,缓存在内存中,查询在单个进程中运行,因此扫描和连接非常快。相比之下,Apache Drill 有更多的工作要做。它必须将您的查询解释为分布式计划,将其发送到所有钻头进程,然后这些进程查找数据源,使用连接器访问数据,运行查询,将结果返回到第一个节点进行聚合,然后您接收最终输出。
根据数据源的不同,Drill 可能必须读取所有数据并单独对其进行过滤,这会增加更多时间。 JSON 文件很慢,因为它们是逐行解析的冗长文本文件。 Parquet 速度要快得多,因为它是一种二进制压缩的面向列的存储格式,专为高效扫描而设计,尤其是当您只访问某些列时。
如果您在一台机器上存储了一个小数据集,那么任何关系数据库都将比 Drill 更快。
考虑到它需要做多少工作才能为您提供它提供的灵活性,Drill 使用 Parquet 在 500 毫秒内为您提供结果的事实确实令人印象深刻。如果您只有几百万行,请坚持使用 SQL 服务器。如果您有数十亿行,那么请使用 SQL Server 列存储功能以具有出色压缩和性能的列格式存储数据。
在以下情况下使用 Apache Drill:
关于performance - Apache Drill 对 SQL Server 的性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39583012/
我是一名优秀的程序员,十分优秀!