Linux:巨大的文件与大量的文件

Linux: huge files vs huge number of files

我正在 AWS 上 Linux 运行 上用 C 编写软件,它必须处理 7200 万个文件中的 240 TB 数据。

数据将分布在 24 个或更多节点上,因此每个节点上只有 10 TB,每个节点有 300 万个文件。

因为我必须每 60 秒向这 300 万个文件中的每一个附加数据,所以最简单和最快的做法是能够同时打开这些文件中的每一个。

我无法将数据存储在数据库中,因为 reading/writing 数据中的性能会太慢。我需要能够非常快速地读回数据。

我的问题:

1) 是否有可能保持打开 300 万个文件

2) 如果可以的话,会消耗多少内存

3) 如果可以的话,性能会不会很差

4) 如果不可能,我需要将所有单个文件组合成几十个大文件。 Linux 中是否有最大文件大小?

5) 如果不可能,我应该使用什么技术每 60 秒追加一次数据并跟踪它?

以下是对可以解决您的问题的体系结构的非常粗略的描述,假设当您有足够的实例时文件描述符的最大数量是无关紧要的。

首先,看一下这个:

https://aws.amazon.com/blogs/aws/amazon-elastic-file-system-shared-file-storage-for-amazon-ec2/

https://aws.amazon.com/efs/

EFS 提供了一个共享存储,您可以将其挂载为文件系统。

您可以将所有文件存储在 EFS 的单个存储单元中。然后,您将需要一组 N 台工作机器 运行 来满负荷处理文件。然后,您可以使用 Redis 队列来分发更新。每个工作人员必须从 Redis 中取出一组更新,然后打开必要的文件并执行更新。

再说一次:打开文件处理程序的最大数量不会有问题,因为如果你达到最大值,你只需要增加工作机器的数量,直到达到你需要的性能。

这是可扩展的,但我不确定这是否是解决您问题的最便宜的方法。