【问题标题】:queries to get data in batches from a huge data table从庞大的数据表中批量获取数据的查询
【发布时间】:2018-06-06 21:06:46
【问题描述】:

我需要从一个巨大的数据表(可能包含 500 万条记录)中创建一些具有我自己格式的文件(假设每个 5000 个记录)。我希望这个创作是多线程的。

那么如何有效地形成查询以获取 1..5000 和 5001..10000 等记录。

我可以形成一些东西,比如 select * from table where rownum

请建议形成查询的最佳方式或创建文件的任何替代方法。

【问题讨论】:

  • 每个文件的行数是否必须相同?好像它不重要一样,您可以将表划分为 ROWID 范围,然后每个线程将使用类似 where rowid between A and B 的内容。
  • 您是在说创建 1,000 个文件吗?是否需要将所有行写入文件?
  • 是的,我正在寻找相同的@DavidAldridge
  • 你如何决定哪条记录到哪个文件?

标签: java sql oracle performance


【解决方案1】:

如果您使用的是 Oracle 11g,则可以使用 DBMS_PARALLEL_EXECUTE 包在多个线程中运行您的过程。 Find out more。

如果您使用的是早期版本,则可以使用 Tom Kyte 的技术实现 DIY 并行。饿了么DBA提供a good explanation on his blog here。

【讨论】:

    【解决方案2】:

    听起来您需要一组使用 MySql LIMIT 子句的查询来实现分页(例如,一个查询将获得第一个 1000,另一个将获得第二个 1000 等等。

    您可以形成这些查询并以Callables 的身份提交给具有设定线程数的Executor service。 Executor 将管理线程。我怀疑在每个 Callable 中查询和写入记录可能更有效,但这是一个可能需要测试的假设。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      • 2019-09-16
      • 2011-06-18
      • 1970-01-01
      相关资源
      最近更新 更多