微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

高效的多处理文件解析与进程之间的重复数据删除

如何解决高效的多处理文件解析与进程之间的重复数据删除

任务是解析数百 GB 的文件(数百万个小文件)并将它们插入到数据库中。 为了有效地完成这项工作,可以在大量进程之间拆分文件,以便每个进程处理一大块文件

问题是数据库 (ClickHouse) 不支持唯一主键,并且应该处理重复项的 ReplacingMergeTree 表引擎不可靠。因此,应在插入之前处理重复项。

挑战在于进程之间的通信。 我尝试了两种失败的方法

  1. 实现一组共享的 ID
  2. 实现一个队列,读取/转换进程在处理文件后写入该队列,单个中央进程从中读取并过滤掉重复项

两个进程都遇到了类似的问题——一旦处理了一定数量文件,它们就会花大部分时间等待对队列或共享集的访问。有一个特定的块大小集触发插入到数据库中。这是必要的,否则 RAM 会耗尽。一旦所有线程第一次达到该块大小,执行就会停止,因为从队列或共享集写入/读取无法跟上 30 多个进程处理文件的速度。

实现这一点的正确有效方法是什么

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。