免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: eye_onme
打印 上一主题 下一主题

读写文件不是效率很低的嘛,那么数据库为何效率高呢 [复制链接]

论坛徽章:
0
131 [报告]
发表于 2008-02-06 19:39 |只看该作者
原帖由 haiyan_qi 于 2007-11-10 22:10 发表
很多人都没自己建过裸设备就在这儿乱说,裸设备对于操作系统的文件系统来讲是不可见的,
操作系统可以看到这个设备,但没有把这块设备用来存放文件,你想用操作系统的命令来在这个设备上建文件是不可能的。
有 ...

前面内容太多了, 没看全. 不过, 我看很多人都有误解.事实上:
1. 数据库使用裸设备, 其实也是通过read/write来做的, 只不过访问的对象不是文件系统,而是字符设备文件, 即/dev/rXXX之类的文件. read/write是系统调用, 访问字符设备时是直接无缓存的访问, 因此数据的更新会比文件系统及时(文件系统的文件读写都是缓存过的). 不过, 如果建库时不使用字符设备文件,而使用块设备文件,例如/dev/hd0b之类的文件,就会发现速度慢下来了,因为块设备是有读写缓存的. 是否直接访问设备,与read/write无关,其实是与设备自身的驱动程序有关.
2. 如果是遍历查找, 全记录更新,直接从后插入新记录,那么文件是要比数据库快上一个数量级的. 例如在INFORMIX/DB2/ORACLE等数据库上,每秒可以插入1万行记录的话,往文件系统中写同样的内容,可以达到10万行/秒以上, 这是早就测试过的. 但数据库的优势也很明显,按索引查找和更新速度快,删除记录或修改记录结构操作方便,容易实现关联查询和分组统计和聚集计算等,这才是数据库的强项.
3. 用文件还是用数据库,是根据应用的需求来看的,例如大机上一直就不使用数据库,而是使用通过COBOL程序访问ISAM或者VSAM文件,能管理的数据规模和处理速度都远高于数据库,但数据库的ACID特性尤其是事务的原子性,文件系统就很难保证了.

评分

参与人数 1可用积分 +5 收起 理由
JohnBull + 5 我很赞同

查看全部评分

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
132 [报告]
发表于 2008-02-13 11:39 |只看该作者
陈年老贴,不错!

论坛徽章:
0
133 [报告]
发表于 2008-05-08 12:55 |只看该作者
原帖由 albcamus 于 2005-4-11 09:56 发表
我只知道大型数据库用raw IO,绕过文件系统直接和驱动层打交道,速度能提高不少。

kidding me?
虽然不懂DB,但是有个疑问,比如在Linux上用个“绕过文件系统直接和驱动层打交道” 的DB,那么就要给他个单独的block device?
不然的话这个DB肯定是要毁坏文件系统的啊。

论坛徽章:
0
134 [报告]
发表于 2008-05-15 10:14 |只看该作者
原帖由 思一克 于 2005-4-21 13:26 发表
再给一个权威的TEST结果

http://www.oracle.com/technology ... ance-Comparison.pdf

ORACLE的数据INPUT和OUTPUT
用ext3最快,ext2次之, 用RAWIO和OCFS(ORACLE自己的RAWFS ...


感觉应该用操作系统的文件, 但如果数据库也是用文件系统,那NAS 为何不能支持数据库? 不解!

论坛徽章:
0
135 [报告]
发表于 2008-07-24 23:41 |只看该作者

回复 #132 wsw1wsw2 的帖子

数据库安装的时候还是安装在文件系统上面的,只是数据库的用来存放数据的表空间是建立在裸设备上面的。然后由数据库来不经过文件系统的cache,直接读写裸设备上的数据。

论坛徽章:
0
136 [报告]
发表于 2008-07-25 00:27 |只看该作者
讨论的不错.

论坛徽章:
0
137 [报告]
发表于 2008-07-25 00:28 |只看该作者

回复 #134 coanne 的帖子

不论是否缓冲,读写的动作还是要通过OS的.

[ 本帖最后由 system888net 于 2008-7-25 00:32 编辑 ]

论坛徽章:
0
138 [报告]
发表于 2008-07-25 08:54 |只看该作者
direct I/O  ?
是不是相当于DMA啊

论坛徽章:
0
139 [报告]
发表于 2008-07-25 12:22 |只看该作者
原帖由 虑而后能得 于 2008-7-25 08:54 发表
direct I/O  ?
是不是相当于DMA啊


这里说的direct I/O和DMA是不同的东西.

论坛徽章:
0
140 [报告]
发表于 2008-07-25 12:27 |只看该作者
原帖由 system888net 于 2008-7-25 12:22 发表


这里说的direct I/O和DMA是不同的东西.

raw I/O又是什么东东
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP