日期:2014-05-17  浏览次数:20466 次

同级别数据量:请教 php 查数据库 查文件 哪个快
请教大家,通过php的函数file_exists()查询文件是否存在,这个函数运行速度和从数据库里查询一条记录相比哪个比较快?
前提,如果是数据库的话单表200万行数据以上(数据量比较大,最终可能过千万),如果是文件的话也是同等级数据量。 
如果使用函数查询,只要知道是否存在即可,如果数据库查询,则需要select出;

请各位前辈指点指点,谢谢

------解决方案--------------------
探讨

性质不同,不具可比性

仅就效果而言
当文件数小于 1024 时,file_exists 快于数据库

按你说的文件数大于200万的话,你已经无法在一个目录中容纳这些文件了。没有效率可言

------解决方案--------------------
判断文件存在时,是不是就要对这200万行甚更多的path进行循环判断。
现在进行比对的就是
200万+的file_exists vs 200万+的select

file_exists函数是会缓存的。 查找数据库orm联结,select多次

所以我倾向于select
------解决方案--------------------
只要你规划好目录结构,应该是没有问题的
需要注意的是,由于文件必须组织在多级目录中,文件中的连接就需要做些处理了
不是很清楚linux的文件系统,以 windows 系统为例:文件在硬盘中是按簇存放的,无论文件多么小,都要占有一簇(4kb)

那么你的 200万 个文件至少需要 2M * 4K = 8G 空间
------解决方案--------------------
不知道你的数据到底是什么数据, 大部分情况下,数据本身的变动性较大, 
如何检索也需要知道. 

数据库支持多样化的查询, 删除修改也很方便. 

文件这些方面都不擅长,更何况这么多文件....

"我想是这样的: html肯定是比较不消耗服务器资源的,所以我想把数据库的文件全部生成静态文件,也就是html文件"
如果这是你唯一的原因,那么我基本认定这样搞静态化是毫无必要.

web是从静态的html转向了动态的技术(php等),而不是反方向,
逆向而行一般需要特别的理由