选择并行流中的查询输出

Posted

技术标签:

【中文标题】选择并行流中的查询输出【英文标题】:Select Query output in parallel streams 【发布时间】:2014-02-25 08:30:00 【问题描述】:

我需要在一个平面文件中假脱机超过 2000 万条记录。直接选择查询将是时间利用。我觉得有必要根据部分数据并行生成输出 - 即有 10 个选择查询,每个并行处理 10% 的数据。然后在 UNIX 上排序和合并。

我可以使用 rownum 来执行此操作,但这会很乏味、静态,并且每次我的 rownum 更改时都需要更新。

有没有更好的选择?

【问题讨论】:

您是否阅读过关键字 SAMPLE(抽样?) 为什么您认为通过同一网络(甚至本地)从同一服务器并行查询相同数据会比单个查询更快? 我的假设是 10 个查询同时假脱机 10 条记录会给我的平面文件比 1 个查询假脱机 100 条记录更快。如果我错了,请在这里纠正我。 【参考方案1】:

如果 SQL 中的数据很好地分布在多个主轴上而不是全部在一个磁盘上,并且当前 IO 和网络通道未饱和,则拆分为单独的流可能会减少您的运行时间。它还可能会在一个或多个源硬盘驱动器上引入随机访问,这会削弱您的吞吐量。读取集群序列以外的任何内容都会导致磁盘争用。

这里的最佳方案是对源表进行分区,每个分区都在单独的存储上(或非常好的条带化),并且每个读取器进程都与分区边界对齐。

【讨论】:

以上是关于选择并行流中的查询输出的主要内容,如果未能解决你的问题,请参考以下文章

JAVA07_Stream流中FindFirst方法查找元素第一个

JAVA07_Stream流中FindFirst方法查找元素第一个

Java 8 并行流中的自定义线程池

Kettle 执行SQL脚本

从 Rust 中的多个音频流中并行获取相同大小的块

Oracle 利用 DMS 中的并行执行(即 UPDATE 查询)