代码之家  ›  专栏  ›  技术社区  ›  Bobbi X

大量写入和删除文件会损害我们的服务器性能吗?

  •  0
  • Bobbi X  · 技术社区  · 13 年前

    我们运行的系统用于缓存,目前每小时写入和删除大约1000个小文件(10k)。 在不久的将来,这个数字将上升到每小时大约10000到20000个正在写入和删除的文件。

    对于正在写入的每个文件,我们的mysql数据库上都会添加一个新行,并在一小时后删除该文件时删除。

    我的问题:

    1. 这种过度的写入&删除操作最终以某种方式损害了我们的服务器性能? (顺便说一句,我们目前在VPS上运行,很快就会在专用服务器上运行。)
    2. 写和删除这么多行最终会减慢数据库的速度吗?
    2 回复  |  直到 12 年前
        1
  •  1
  •   Mikhail Vladimirov    13 年前

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

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

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

        2
  •  1
  •   Ghigo    13 年前

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

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

    还可以考虑,现代操作系统将文件系统的部分缓存在内存中,以提高性能并减少磁盘访问(尤其是多次删除时)。

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

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

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