我的任务是从代表我们客户群的6,800个表中转储数据(每个表都设置在'shard'中,它们按'cluster'中的区域分组)。在大多数情况下,这些表格非常小,但大约有500个,其中行数达到数百万。所有表格的总行数大约为6亿。
我目前的流程是与16名员工同时建立的,到目前为止,我已尝试过三种策略来转储这些大表:
我首先尝试拉出表格的最大id
,然后以200k的增量迭代,直到我使用id
之类的内容达到最大WHERE id > lowerBound and id <= upperBound
。这就是我们的流程之前的工作方式,并且除了他们开始创建将一些客户端标识号合并在一起的id之外,还将继续工作,并且数以万亿为单位。因此,这些表格中id
的范围现在介于1到n万亿之间,这使得这种策略不可行。
我接下来尝试使用与ORDER BY id
混合的LIMIT 200000
并进行迭代,直到行数小于LIMIT
。事实证明这非常昂贵,花了很长时间才能完成所有表格。
我最近的尝试是使用COPY
命令将大表转储到文件中,然后迭代并处理它们。这似乎需要与之前的解决方案一样多的时间,即使这是我们的DBA推荐的。这个过程最多可能需要24小时才能完成所有数据的提取,这是不可接受的。
我最终会知道最好的方法是什么。是否有更好的方法来增加类似解决方案1或2?