database - 涉及大量磁盘 I/O 的大批量处理的并行方法

标签 database algorithm amazon-web-services parallel-processing disk

我有一个任务需要做以下事情

for fi in files, do in parallel:
  for job in jobs, do serially:
    read fi into memory from disk
    do job(fi), save output to disk

(任务的特殊性使得并行化内部循环不切实际。)

有数千个文件和大约 400 个作业。现在 files 是一堆 .csvs,我将输出保存到其他地方的一堆 csv。输入 csvs 大约 30MB,输出大约 10MB

我真正想要的是一个数据库,但我所知道的数据库无法处理并行 I/O。所以我只是阅读并保存了一堆 csv。我知道操作系统也不能执行并行 I/O,但它比我所知道的数据库更好地处理并行请求。

那么,执行此操作的更好方法是什么?我在 AWS 上,现在一切都在 EBS 卷中。我是否期望更好的性能将所有输入推送到 S3 存储桶、根据需要下载它们并上传输出(每个文件有几 MB)?

或者是否有某种并行 I/O 数据库架构存在于云中的某处,我可以了解然后租用?

欢迎就如何解决此问题提出建议。

最佳答案

我认为您正在做的 I/O 比您需要的多得多。你有:

for fi in files, do in parallel:
  for job in jobs, do serially:
    read fi into memory from disk
    do job(fi), save output to disk

假设您有能力创建内存流,您可以这样做:

for fi in files, do in parallel:
  read fi into memory and create memory stream ms
  for job in jobs, do serially:
    do job(ms), save output to disk

当然,这假设您正在复制从磁盘读入的文件,而不是就地修改它。

这应该会大大提高您的速度。您不是每次读取数千个文件 400 次,而是每个文件读取一次。

关于database - 涉及大量磁盘 I/O 的大批量处理的并行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53210796/

相关文章:

sql - 将列中的随机字符串添加到数据库中的每一行

PHP - 在选择文件图像中显示图像名称

amazon-web-services - 从外部帐户访问ECS存储库

.net - 数据库表复制指南

sql - SSRS - 如果数据库不存在则忽略

algorithm - 将小数转换为负十进制的算法?

algorithm - 顶点覆盖的近似算法

c++ - 生成不同于数组的 1000 个元素的新元素

json - ECS实例无法挂载EFS

amazon-web-services - 使用 BitBucket 管道在拉取请求合并时构建 Maven 项目