linux + apache + php + mysql 的环境文章的内容 肯定不会用于 查询检索,大概有10万条记录,1.5G左右,是放在数据库里建文章id索引 还是放在文件系统里,用文章id号做文件名,然后include进来哪种方式速度快并且节省资源

解决方案 »

  1.   

    本帖最后由 ACMAIN_CHM 于 2010-03-10 18:19:02 编辑
      

  2.   

    放数据库节省硬盘,放文件系统节省CPU,因为不需要从数据库读数据
    不过放文件系统里需要分目录存放,要做好组织工作,在同一个目录下放太多文件速度会很慢,以不超过1000个为好
      

  3.   

    放文件系统中。 所有文件(10万多个)全部放在一个目录下 /mydoc/web LINUX下尚可支持。
    数据库表中存储  ID,  比如 id =4 则文件名为 /mydoc/web/4.htm 
    使用时直接 <include /mydoc/web/4.htm >如上设计的话,显然速度要比把文件内容放在数据库中快。
    1. 速度上,无需通过数据库读BLOB字段,直接通过操作系统的文件IO访问。这样显然比调用数据库然后再由MYSQL去从磁盘中读数据要快得多。
    2. 磁盘空间上,放在操作系统中会略多占。由于文件系统每次分配一簇,假设一簇为 4KB,则平均每个文件会浪费 2KB 的磁盘空间。10万*2KB=200MB=0.2 G
      

  4.   

    在数据库中快。。不管哪种数据库对于表都有索引。如果后台用存储过程哪就更快拉。不过这样不易移植。开发成本高。大型系统才会这样做。。10W记录放在MYSQL中就行拉
      

  5.   


    放文件系统中 你从数据库读取到文件名,再去读文件时还要多出打开和关闭文件的操作,一条记录一个文件的话,1W条记录就是1W个文件,100W条记录就是100W个文件,对于更新和查找比较频繁的数据库,则意味着频繁的打开和关闭文件,这个消耗的时间应该要比从数据库中直接读数据消耗的多
      

  6.   

    如果不用考虑数据完整性、可靠性、可维护性等因素以ext4文件系统为例,应该是文件系统更快,现代文件系统的目录索引结构都采用类似B树的结构,检索效率很高
      

  7.   

    dos进入windows时,从borland c++的dos版(3.1)到win版(4.x),感觉没什么太多的跃变; 
    看过一点vb(4?),然后就遇到了以前turbo pascal的接班人:Delphi 1.0! 
    从而走上不归路,15年来就没再改攻其他语言,主要是用过delphi之后的一览众山小(或者说除却巫山不是云)——当然,也许深层的原因
      

  8.   

    dos进入windows时,从borland c++的dos版(3.1)到win版(4.x),感觉没什么太多的跃变; 
    看过一点vb(4?),然后就遇到了以前turbo pascal的接班人:Delphi 1.0! 
    从而走上不归路,15年来就没再改攻其他语言,主要是用过delphi之后的一览众山小(或者说除却巫山不是云)——当然,也许深层的原因
      

  9.   

    上面也有人说了 频繁读写多个文件比在同一文件中读写会慢很多 这么看还是该放在数据库 或者你自己建立一个大文件 分块存储所有文件 另外弄一个索引文件记录每个文件的信息 取的时候都在同一文件中 免去不停open/close的开销 也不用像数据库那样让许多不用的功能产生开销 这样比较好
      

  10.   

    数据库是一种通用解决方案,各方面都做了协调和妥协来达成通用的需求(比如查询),既然你的需求比较单一,那么也许LINUX本身的文件结构是最好的方式
      

  11.   

    好多人说放在文件系统,原因就是数据库也是放在文件系统,所以还不如直接放在文件系统里,如果是一般文件,只显示,那当然是放在文件系统里快,不过也不一定,因为数据库比较智能,可能缓存数据,不是每次都直接读硬盘的,文件系统I/O函数就比较死板了,除非你的web服务器是你自己写的,而且,你这个文件不用全文检索?查询吗?你能比数据库更高效地组织文件吗?还方便随时更改吗?
    我想很多人都没这能力,一篇技术文章,包含java,sql内容,是放在java文件目录还是sql文件目录好呢?
    我想你也想不出好的组织文件的方案来,如果你想建个索引文件,指示这篇文章即和java有关,又和sql有关,
    呵呵,有想法,不过这正好步入数据库设计了,后来如果这篇文章修改了,又和linux有关联,那么是在索引文件的末尾加一条记录还是在上次记录的位置之后(排序的索引文件)插入呢?在文件末尾插入,你就必须每次扫描整个索引文件,索引文件记录排序的话,每次插入删除你都要移动很多记录,当然,你有好的算法,不过后面的问题会很多,越来越像设计数据库了,那么你有能力设计比现成数据库差不多高效的系统吗?
      

  12.   

    hao  a  ,谁那有ISO的制作软件?
      

  13.   

    用下专业的文挡数据库把.~~~mongoDB
      

  14.   

    我想你首先应该定义“快”到底是为了什么?是为了读出来显示在屏幕上,还是读出来发送给其它机器?还是其它?如果是要读出来显示在屏幕上的话,相信现在世界上还没有能够同时显示10万篇文章内容的屏幕:)如果要读出来发送给其它机器,那么就要计算一下你的网速了,如果网速只有1~2M,你读得再快也是浪费系统资源。如果系统要加载,建议不要一下加载这么多数据,可以采用代理模式的方式,真正需要的时候才读取。除了考虑以上因素外,我个人认为放在数据库里面好,因为现在的主流数据库都有大对象(例如Oracle的Blob),这些大对象也是直接存储在文件系统中,只不过是由数据库进行管理,数据库本身已经有缓存、索引等完善的功能了;而操作系统的缓存和索引都是通用的,性能上应该比数据库要差一些。