备份数千个文件……开销太大了

备份数千个文件……开销太大了

我们有一个系统,每天可以生成 5k - 10k 个 XML 文件。说来话长,但该系统短期内不会改变。

无论如何,系统会将这些 XML 文件(每个 3k-20k)转储到一个文件夹中。因此,想象一下该文件夹开始变得多么拥挤。

我编写了一个程序,它接收文件并将它们组织成年/月/日格式的层次结构。然后另一个程序进入并删除任何超过 90 天的文件。

问题就在这里。我们的备份系统(同样,这是无法改变的)需要几个小时才能备份这些存档文件夹,因为有近 100 万个文件。备份会进行完整备份(同样,我们无法改变),而备份必须打开并检查每个 XML 文件。因此备份速度非常慢,以至于它实际上无法在第二天晚上的备份之前完成!

所以我现在一直在做的是把每月的文件夹都整理成 7z 存档。这个方法很好用。20 万个文件缩减为一个文件。但是,我必须手动完成这个操作。

另外,还有一个问题。我们无法存档当前月份。因此,始终需要有 30 天(x 5k - 10k)的文件可立即“搜索”。

关于如何更好地处理这个问题有什么建议吗?

我的脑海里闪过以下的想法:

1) 编写一个程序,获取前一天的数据并转储到 SQL。然后将文件添加到存档中。

2) 可以将 XML 移动到某种类型的“实时存档”文件系统。

谢谢。

答案1

如果它们是 XML,是否可以在压缩之前将它们连接起来?这样它们应该会压缩得更好(更好的共享符号字典)如果您将每个月末的日文件连接成一个大月份 XML 文件,或者更进一步连接年份,甚至连接除本月之外的所有历史记录,您几乎可以做现在正在做的事情。在所有情况下,您都可以压缩它们。

听起来你做得还不错,除了需要编写一些脚本来自动为你完成一些事情之外。

答案2

您是否考虑过 logrotate ?它主要用于日志归档,但它也可以满足您的需求。

关于您的情况,您有什么数据库?它能支持您提到的纯文本数量吗?

另外,为什么您必须手动进行 7zip 存档?为什么不使用 cron 来帮您完成呢?

答案3

您没有提到您的平台...如果是 Linux,为什么不编写一个排序脚本(您似乎已经这样做了)将它们分成更小的目录,然后运行 ​​7z 命令行存档将这些目录压缩为一个文件,然后备份它们?

或者,您可以创建一个“备份服务器”,通过 IP 镜像转储的目录(类似于 drdb 或 rsync),然后您可以在该服务器上进行备份,并可以释放负担过重的服务器上的一些资源。

但实际上,除了想办法减少你创建的文件数量之外,你的选择非常有限。你提到的每一堵墙都被贴上了无法解决或改变的标签。

如果您的月度数据必须可立即搜索,也许您需要研究数据库解决方案或将其与数据库集成的方法。从听起来,您已经将文件系统用作临时数据库,而将信息实际放入数据库应该可以提高您的性能(以及备份能力)。

答案4

您可以尝试使用不同的文件系统(xfs)并调整其参数。

例如:http://everything2.com/title/Filesystem+performance+tweaking+with+XFS+on+Linux

您还可以添加一些磁盘驱动器和/或配置更快的 RAID 级别来提高性能,因为看起来您在 IOPS 方面存在瓶颈。

相关内容