我的主要原因是对不同的选择有意见。我在与视频相关联的目录中有文件/缩略图,当我必须获取它们时,我使用glob()函数glob(DIRECTORY./file_name*.jpg);并返回视频的所有JPG文件的数组。

Glob函数本身非常快,但是我仍然担心使用率,因为在每个页面上可以有20到50个视频,因此会有20到50个Glob调用,如果我继续使用它或开始将数据放入数据库中以从中获取文件列表在那里而不是glob(); ?

如果有更好的选择,请告诉我。

谢谢。

最佳答案

与性能问题一样,结果可能会相差很大,因此答案是:更快的是更快的方法。

开始的地方是衡量现在做事情需要花费多少时间。完成此操作后,请问自己:这足够快吗?可能是,尽管它可能不是最快的处理方法,但它仍然是如此之快,以至于速度并不是问题。

处理页面花费了多少时间来获取文件文件? 1%? 10%? 50%?这个百分比越高,考虑改变您的做事方式就越有值(value)。

此外,网站整体表现如何?如果您将每个页面加载的速度提高了一倍,人们会注意到吗?如果不是这样,那么即使您看到这样做的明显位置,也可能根本不值得进行性能调整。

如果您认为自己可以做得更好,请使用数据库来实现该功能,然后测量它是否更快。同样,此结果可能会高度可变。例如,如果您的数据库负载沉重,那么从数据库获取结果可能会慢得多。如果您有一个几乎没有使用过的强大数据库,那么它可能会很快。只有测试才能告诉您真相。

我要补充一点,因为您可以根据磁盘上的实际文件来查找文件名,所以您现在的工作方式看起来更简单,更可维护。如果尝试使用数据库,则将不得不担心将数据库中的文件名列表与文件系统中的文件列表同步。

但是要注意的一件事是,当您只有一个目录中包含大量文件时,许多文件系统的性能都会变差。如果遇到这种情况,请考虑将文件拆分为多个子目录。一种流行的方法是创建名称为az的目录,然后将所有以“a”开头的文件放在“a”目录中,并将所有以“b”开头的文件放在“b”目录中,等等。但是,这可能只是一旦拥有成千上万的文件,这一点就很重要,即使如此,它也取决于特定的文件系统及其运行的硬件。

(根据评论进行编辑:)

由于您正在谈论预先计算结果并将结果存储在数据库中,因此我建议使用比http://memcached.org/这样的缓存服务器,而不是将结果存储在数据库中更好的方法。您可以将其视为一种混合方法:您仍然按照现在的方式来做事,但是每次想要结果时,首先要检查缓存以查看其中是否包含结果;如果是,则使用缓存的结果,否则计算新的glob。这样可以避免使数据库和文件系统保持同步的问题,因为旧的缓存条目可能会过期,并被新的,正确的缓存条目替代。

08-18 14:01
查看更多