放文件系统里快,还是数据库里快 linux + apache + php + mysql 的环境文章的内容 肯定不会用于 查询检索,大概有10万条记录,1.5G左右,是放在数据库里建文章id索引 还是放在文件系统里,用文章id号做文件名,然后include进来哪种方式速度快并且节省资源 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本帖最后由 ACMAIN_CHM 于 2010-03-10 18:19:02 编辑 放数据库节省硬盘,放文件系统节省CPU,因为不需要从数据库读数据不过放文件系统里需要分目录存放,要做好组织工作,在同一个目录下放太多文件速度会很慢,以不超过1000个为好 放文件系统中。 所有文件(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 在数据库中快。。不管哪种数据库对于表都有索引。如果后台用存储过程哪就更快拉。不过这样不易移植。开发成本高。大型系统才会这样做。。10W记录放在MYSQL中就行拉 放文件系统中 你从数据库读取到文件名,再去读文件时还要多出打开和关闭文件的操作,一条记录一个文件的话,1W条记录就是1W个文件,100W条记录就是100W个文件,对于更新和查找比较频繁的数据库,则意味着频繁的打开和关闭文件,这个消耗的时间应该要比从数据库中直接读数据消耗的多 如果不用考虑数据完整性、可靠性、可维护性等因素以ext4文件系统为例,应该是文件系统更快,现代文件系统的目录索引结构都采用类似B树的结构,检索效率很高 dos进入windows时,从borland c++的dos版(3.1)到win版(4.x),感觉没什么太多的跃变; 看过一点vb(4?),然后就遇到了以前turbo pascal的接班人:Delphi 1.0! 从而走上不归路,15年来就没再改攻其他语言,主要是用过delphi之后的一览众山小(或者说除却巫山不是云)——当然,也许深层的原因 dos进入windows时,从borland c++的dos版(3.1)到win版(4.x),感觉没什么太多的跃变; 看过一点vb(4?),然后就遇到了以前turbo pascal的接班人:Delphi 1.0! 从而走上不归路,15年来就没再改攻其他语言,主要是用过delphi之后的一览众山小(或者说除却巫山不是云)——当然,也许深层的原因 上面也有人说了 频繁读写多个文件比在同一文件中读写会慢很多 这么看还是该放在数据库 或者你自己建立一个大文件 分块存储所有文件 另外弄一个索引文件记录每个文件的信息 取的时候都在同一文件中 免去不停open/close的开销 也不用像数据库那样让许多不用的功能产生开销 这样比较好 数据库是一种通用解决方案,各方面都做了协调和妥协来达成通用的需求(比如查询),既然你的需求比较单一,那么也许LINUX本身的文件结构是最好的方式 好多人说放在文件系统,原因就是数据库也是放在文件系统,所以还不如直接放在文件系统里,如果是一般文件,只显示,那当然是放在文件系统里快,不过也不一定,因为数据库比较智能,可能缓存数据,不是每次都直接读硬盘的,文件系统I/O函数就比较死板了,除非你的web服务器是你自己写的,而且,你这个文件不用全文检索?查询吗?你能比数据库更高效地组织文件吗?还方便随时更改吗?我想很多人都没这能力,一篇技术文章,包含java,sql内容,是放在java文件目录还是sql文件目录好呢?我想你也想不出好的组织文件的方案来,如果你想建个索引文件,指示这篇文章即和java有关,又和sql有关,呵呵,有想法,不过这正好步入数据库设计了,后来如果这篇文章修改了,又和linux有关联,那么是在索引文件的末尾加一条记录还是在上次记录的位置之后(排序的索引文件)插入呢?在文件末尾插入,你就必须每次扫描整个索引文件,索引文件记录排序的话,每次插入删除你都要移动很多记录,当然,你有好的算法,不过后面的问题会很多,越来越像设计数据库了,那么你有能力设计比现成数据库差不多高效的系统吗? hao a ,谁那有ISO的制作软件? 用下专业的文挡数据库把.~~~mongoDB 我想你首先应该定义“快”到底是为了什么?是为了读出来显示在屏幕上,还是读出来发送给其它机器?还是其它?如果是要读出来显示在屏幕上的话,相信现在世界上还没有能够同时显示10万篇文章内容的屏幕:)如果要读出来发送给其它机器,那么就要计算一下你的网速了,如果网速只有1~2M,你读得再快也是浪费系统资源。如果系统要加载,建议不要一下加载这么多数据,可以采用代理模式的方式,真正需要的时候才读取。除了考虑以上因素外,我个人认为放在数据库里面好,因为现在的主流数据库都有大对象(例如Oracle的Blob),这些大对象也是直接存储在文件系统中,只不过是由数据库进行管理,数据库本身已经有缓存、索引等完善的功能了;而操作系统的缓存和索引都是通用的,性能上应该比数据库要差一些。 Can't create a new thread (errno -1); if you are not out of available memory?? 请教这个存储过程该怎么编写 关于增量备份的疑问 MySql存储过程问题 Mysql有没有办法在插入时获得当前自增Id的函数,我有两个列用到该id? mysql里面实现批量增加1000 的name字段,应该什么实现 高分求助mysql字符集修改问题,请高手指教! 一个简单的问题,散分了 字段自动变值,怎么做,没多少分了,就20了,谢谢 使用MySQL ODBC API的问题 在线词典数据库结构如何设计,请有经验的大侠们指点。 mysql默认查询机制问题
不过放文件系统里需要分目录存放,要做好组织工作,在同一个目录下放太多文件速度会很慢,以不超过1000个为好
数据库表中存储 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
放文件系统中 你从数据库读取到文件名,再去读文件时还要多出打开和关闭文件的操作,一条记录一个文件的话,1W条记录就是1W个文件,100W条记录就是100W个文件,对于更新和查找比较频繁的数据库,则意味着频繁的打开和关闭文件,这个消耗的时间应该要比从数据库中直接读数据消耗的多
看过一点vb(4?),然后就遇到了以前turbo pascal的接班人:Delphi 1.0!
从而走上不归路,15年来就没再改攻其他语言,主要是用过delphi之后的一览众山小(或者说除却巫山不是云)——当然,也许深层的原因
看过一点vb(4?),然后就遇到了以前turbo pascal的接班人:Delphi 1.0!
从而走上不归路,15年来就没再改攻其他语言,主要是用过delphi之后的一览众山小(或者说除却巫山不是云)——当然,也许深层的原因
我想很多人都没这能力,一篇技术文章,包含java,sql内容,是放在java文件目录还是sql文件目录好呢?
我想你也想不出好的组织文件的方案来,如果你想建个索引文件,指示这篇文章即和java有关,又和sql有关,
呵呵,有想法,不过这正好步入数据库设计了,后来如果这篇文章修改了,又和linux有关联,那么是在索引文件的末尾加一条记录还是在上次记录的位置之后(排序的索引文件)插入呢?在文件末尾插入,你就必须每次扫描整个索引文件,索引文件记录排序的话,每次插入删除你都要移动很多记录,当然,你有好的算法,不过后面的问题会很多,越来越像设计数据库了,那么你有能力设计比现成数据库差不多高效的系统吗?