0

我们运行一个用于缓存目的的系统,目前每小时写入和删除大约 1,000 个小文件 (10k)。在不久的将来,这个数字将增加到每小时大约 10,000 - 20,000 个文件被写入和删除。

对于正在写入的每个文件,一个小时后删除文件时,会在我们的 mysql DB 上添加和删除新行。

我的问题:

  1. 这种过度的写入和删除操作最终会以某种方式损害我们的服务器性能吗?(顺便说一句,我们目前在 VPS 上运行它,很快就会在专用服务器上运行。)
  2. 写入和删除这么多行最终会减慢我们的数据库吗?
4

2 回答 2

1

这在很大程度上取决于操作系统、文件系统和文件系统缓存的配置。这也取决于您的数据库是否与写入/删除的文件存储在同一磁盘上。

通常,文件创建和文件删除等影响文件系统结构的操作需要一些同步的磁盘 IO,因此操作系统在断电后不会丢失这些更改。不过,一些操作系统和文件系统可能为此支持更宽松的策略。例如,FreeBSD 上的 UFS 文件系统有很好的“软更新”选项来执行此操作。可能 etx3/Linus 应该有类似的功能。

一旦您将移动到专用服务器,我认为将几个 HDD 连接到它并确保数据库存储在一个磁盘上而在另一个磁盘上执行大量文件操作是合理的。在这种情况下,数据库性能不应受到影响。

于 2013-03-14T08:52:32.717 回答
1

您应该进行一些计算并估计存储所需的吞吐量。在最坏的情况下,每小时 20000 个文件 x 10K = 200MB,这是一个非常低的要求。在现代文件系统上删除文件只需要很少的时间。

在我看来,您不必担心,尤其是当您的应用程序按顺序创建和删除文件时。

还要考虑现代操作系统在内存中缓存文件系统的部分以提高性能并减少磁盘访问(尤其是对于多次删除来说更是如此)。

您的数据库会增长,但引擎已针对它进行了优化,无需关心它。

唯一的缺点是,如果您的文件系统受到它的影响,处理许多小文件可能会导致磁盘碎片。

为了提高性能,您应该考虑为这些文件使用单独的物理存储(例如不同的磁盘驱动器或磁盘阵列),这样您就可以利用全带宽传输而不会受到其他干扰。

于 2013-03-14T09:03:32.610 回答