请教大家,通过php的函数file_exists()查询文件是否存在,这个函数运行速度和从数据库里查询一条记录相比哪个比较快?
前提,如果是数据库的话单表200万行数据以上(数据量比较大,最终可能过千万),如果是文件的话也是同等级数据量。
如果使用函数查询,只要知道是否存在即可,如果数据库查询,则需要select出;请各位前辈指点指点,谢谢
前提,如果是数据库的话单表200万行数据以上(数据量比较大,最终可能过千万),如果是文件的话也是同等级数据量。
如果使用函数查询,只要知道是否存在即可,如果数据库查询,则需要select出;请各位前辈指点指点,谢谢
当文件数小于 1024 时,file_exists 快于数据库按你说的文件数大于200万的话,你已经无法在一个目录中容纳这些文件了。没有效率可言
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.
如果我按照文件名来分类的话,是不是可行?
你说的1024是K还是B
原来是这个意思, 楼主不如用NOSQL了, 因为自己做文件的话必须考虑目录列表遍历的损耗, 一个目录下文件太多同样很慢很慢很慢, 可以目录分级来解决这个问题, 自己制定分级规则即可,一般传说每个目录下最多1024个文件比较快,可能与inode自身大小有关。
可行如果我按照文件名来分类的话,是不是可行?
多级目录,可行你说的1024是K还是B
文件数,你说是什么
现在进行比对的就是
200万+的file_exists vs 200万+的selectfile_exists函数是会缓存的。 查找数据库orm联结,select多次所以我倾向于select
磁盘文件就是文件 -,-##...静态化技术很简单,就像你说的,不过不要在一个目录下放置超过1024个文件,那样file_exists/filemtime之类的函数执行会变慢,所以你最好根据URL为每个静态化文件做多级目录,这样性能就高了。当然,即便静态化了也是无法避免一次php脚本执行的消耗,我做过一个分享PPT,静态化页面+opt加速脚本后,吞吐率较无memcached数据缓存提升了近2000吞吐率,较使用memcached数据缓存提升了1000+吞吐率,最后我这里的lighttpd和apache的动态页面吞吐率达到了6000,机器就是一台破笔记本。
需要注意的是,由于文件必须组织在多级目录中,文件中的连接就需要做些处理了
不是很清楚linux的文件系统,以 windows 系统为例:文件在硬盘中是按簇存放的,无论文件多么小,都要占有一簇(4kb)那么你的 200万 个文件至少需要 2M * 4K = 8G 空间
如何检索也需要知道. 数据库支持多样化的查询, 删除修改也很方便. 文件这些方面都不擅长,更何况这么多文件...."我想是这样的: html肯定是比较不消耗服务器资源的,所以我想把数据库的文件全部生成静态文件,也就是html文件"
如果这是你唯一的原因,那么我基本认定这样搞静态化是毫无必要.web是从静态的html转向了动态的技术(php等),而不是反方向,
逆向而行一般需要特别的理由