Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-读取目录与从数据库获取_Php_Database_Memory_Directory_Glob - Fatal编程技术网

PHP-读取目录与从数据库获取

PHP-读取目录与从数据库获取,php,database,memory,directory,glob,Php,Database,Memory,Directory,Glob,我的主要原因是对不同的选择有不同的看法。我在与视频相关联的目录中有文件/拇指,当我必须获取它们时,我使用glob()函数glob(directory./file_name*.jpg);它返回视频中所有JPG文件的数组 glob函数本身非常快,但我仍然担心它的使用,因为在每个页面上可能有20到50个视频,因此将有20到50个glob调用,我应该继续使用它还是开始将数据放入数据库以从那里而不是glob()获取文件列表 如果有更好的选择,请告诉我 谢谢。与往常一样,性能问题的结果可能会有很大差异,因此

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

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

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


谢谢。

与往常一样,性能问题的结果可能会有很大差异,因此答案是:什么更快,什么对有效

开始的地方是衡量你现在做事情需要多少时间。一旦你这样做了,问问自己:这足够快吗?这可能是因为,虽然这可能不是做事情的最快方式,但它仍然是如此之快,以至于速度不是一个问题

处理一个页面的时间有多少是用来获取文件globs的?1%? 10%? 50%? 这个百分比越高,就越值得考虑改变你做事的方式。

此外,网站整体性能如何?如果你将每个页面的加载速度提高一倍,人们会注意到吗?如果没有,那么即使您看到了明显的地方,也可能不值得进行性能调优

如果您认为您可以做得更好,请使用您的数据库实现该功能,并衡量这是否更快。同样,这种方法的结果可能是高度可变的。例如,如果您的数据库负载很重,则从数据库获取结果可能会慢得多。如果你有一个功能强大的数据库,而且很少使用,那么它可能会非常快。只有测试才能告诉你真相

我要补充的是,您现在的操作方式似乎更简单,也更易于维护,因为它根据磁盘上的实际文件查找文件名。如果您试图使用数据库,您将不得不担心数据库中的文件名列表与文件系统中的文件列表是否同步

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

(根据评论编辑:)


由于您谈论的是预计算结果并将其存储在数据库中,因此我建议比将结果放入数据库中更好的方法是使用缓存服务器,如http://memcached.org/. 您可以将其视为一种混合方法:您仍然按照现在的方式进行操作,但每次需要结果时,您都首先检查缓存以查看它是否包含结果;如果是,则使用缓存的结果,否则计算新的glob。这就避免了数据库和文件系统同步的问题,因为旧的缓存条目可以过期并被新的、正确的替换。

< P>如果您已经在数据库中存储了视频本身的信息,那么您可以考虑在视频数据存储的表中只存储每个视频的大拇指数。这比查询单独的完整文件名表要快得多,因为您只需引用已查询记录中的字段。这可能是你目前两个想法之间的一个很好的折衷。但是,您必须确保拇指的名称一致且可编程。例如,如果视频123只有4个拇指,则可以生成:

/path/to/video_123/thumb_01.jpg
/path/to/video_123/thumb_02.jpg
/path/to/video_123/thumb_03.jpg
/path/to/video_123/thumb_04.jpg

考虑到一次有50多个用户在线,这个问题的核心问题似乎是你“关心使用”,但不清楚你的意思是什么。请更清楚地解释与您有关的问题,以便我们提供帮助。在你看来,你现在这样做到底有什么问题?谢谢内特。是的,我主要关心的是CPU/内存或者说性能。哪个选项更好。感谢我现在将执行一个测试,它将在本地环境中进行,因此结果可能会有所不同,但在我上线之前仍然是一个很好的做法。文件名是唯一的,拇指文件如filename-1.jpg、filename-2.jpg、filename-3.jpg等,每个视频可以有1到30个拇指。我在考虑使用数据库,因为一旦保存了数据,我就不必每次都进行glob。只需重新使用已经保存的数据,再结合json(ed)数组,速度就会快得多……我明白你的意思了。这本身就更快,因为结果是为您预先计算的。不过,我建议使用像memcached这样的缓存服务器,而不是数据库,它更适合这种使用/thumbs/2012/8/31/filename-1.jpg等等。。。我正在编写使用json和数据库的代码,以便将所有文件名存储在单个字段中。我可以使用memcache,但我必须编写一个适合大多数服务器环境的代码,因为我的代码是开源的(ClipBucket),没有多少人对缓存和其他东西有很好的了解,所以我担心内存。再次感谢你的建议。谢谢。谢谢,但拇指也有不同的大小,用户也可以上传自定义拇指和删除现有的,文件名基本上是拇指的前缀。拇指也可以有名称,比如filename-300x240-2.jpg我以前的代码只使用增量,我存储了数字,但现在它不仅仅是一个增量。谢谢你的建议