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

解决方案 »

  1.   

    性质不同,不具可比性仅就效果而言
    当文件数小于 1024 时,file_exists 快于数据库按你说的文件数大于200万的话,你已经无法在一个目录中容纳这些文件了。没有效率可言
      

  2.   

    file_exists是检查文件在不在,和数据库查记录怎么成平行的东西了?file_exists的实现是access,数据库查询的话加索引查200万也不是问题。NAME
           access - check real user’s permissions for a fileSYNOPSIS
           #include <unistd.h>       int access(const char *pathname, int mode);DESCRIPTION
           access() checks whether the calling process can access the file pathname.  If pathname is a symbolic link, it is dereferenced.       The  mode  specifies  the accessibility check(s) to be performed, and is either the value F_OK, or a mask consisting of the bitwise OR of one or more of
           R_OK, W_OK, and X_OK.  F_OK tests for the existence of the file.  R_OK, W_OK, and X_OK test whether the file exists and grants read, write, and  execute
           permissions, respectively.       The  check  is  done using the calling process’s real UID and GID, rather than the effective IDs as is done when actually attempting an operation (e.g.,
           open(2)) on the file.  This allows set-user-ID programs to easily determine the invoking user’s authority.       If the calling process is privileged (i.e., its real UID is zero), then an X_OK check is successful for a regular file if execute permission is  enabled
           for any of the file owner, group, or other.
      

  3.   

    那请问,如果我想处理数据库中的数据生成html文件的话,是不是就不可行了?
    如果我按照文件名来分类的话,是不是可行?
    你说的1024是K还是B
      

  4.   


    原来是这个意思, 楼主不如用NOSQL了, 因为自己做文件的话必须考虑目录列表遍历的损耗, 一个目录下文件太多同样很慢很慢很慢, 可以目录分级来解决这个问题, 自己制定分级规则即可,一般传说每个目录下最多1024个文件比较快,可能与inode自身大小有关。
      

  5.   

    如果我想处理数据库中的数据生成html文件的话,是不是就不可行了?
    可行如果我按照文件名来分类的话,是不是可行?
    多级目录,可行你说的1024是K还是B
    文件数,你说是什么
      

  6.   

    判断文件存在时,是不是就要对这200万行甚更多的path进行循环判断。
    现在进行比对的就是
    200万+的file_exists  vs   200万+的selectfile_exists函数是会缓存的。  查找数据库orm联结,select多次所以我倾向于select
      

  7.   

    感谢大家帮忙,我想是这样的: html肯定是比较不消耗服务器资源的,所以我想把数据库的文件全部生成静态文件,也就是html文件。 但是因为数据比较多,所以不知道这样会不会有什么问题。 做成磁盘文件是什么意思,我没百度到,麻烦能介绍一下吗,非常感谢!
      

  8.   


    磁盘文件就是文件 -,-##...静态化技术很简单,就像你说的,不过不要在一个目录下放置超过1024个文件,那样file_exists/filemtime之类的函数执行会变慢,所以你最好根据URL为每个静态化文件做多级目录,这样性能就高了。当然,即便静态化了也是无法避免一次php脚本执行的消耗,我做过一个分享PPT,静态化页面+opt加速脚本后,吞吐率较无memcached数据缓存提升了近2000吞吐率,较使用memcached数据缓存提升了1000+吞吐率,最后我这里的lighttpd和apache的动态页面吞吐率达到了6000,机器就是一台破笔记本。
      

  9.   

    只要你规划好目录结构,应该是没有问题的
    需要注意的是,由于文件必须组织在多级目录中,文件中的连接就需要做些处理了
    不是很清楚linux的文件系统,以 windows 系统为例:文件在硬盘中是按簇存放的,无论文件多么小,都要占有一簇(4kb)那么你的 200万 个文件至少需要 2M * 4K = 8G 空间
      

  10.   

    PPT能发我学习学习吗?[email protected]
      

  11.   

    不知道你的数据到底是什么数据, 大部分情况下,数据本身的变动性较大, 
    如何检索也需要知道. 数据库支持多样化的查询, 删除修改也很方便. 文件这些方面都不擅长,更何况这么多文件...."我想是这样的: html肯定是比较不消耗服务器资源的,所以我想把数据库的文件全部生成静态文件,也就是html文件"
    如果这是你唯一的原因,那么我基本认定这样搞静态化是毫无必要.web是从静态的html转向了动态的技术(php等),而不是反方向,
    逆向而行一般需要特别的理由