免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
111 [报告]
发表于 2006-08-05 20:35 |只看该作者
原帖由 giniouswr 于 2006-8-5 17:50 发表
DMA技术的重要性在于,利用它进行数据传送时不需要CPU的参与。每台电脑主机板上都有DMA控制器,通常计算机对其编程,并用一个适配器上的ROM(如软盘驱动控制器上的ROM)来储存程序,这些程序控制DMA传送数据。一旦控 ...


DMA的过程虽然不需要CPU参与,但是不要忘了仍然需要总线参与,而现在的X86系统下,总线恰恰是瓶颈所在。另外,DMAC对于总线的使用不像CPU那样讲究,长时间地占用总线和RAM子系统究竟带来效应一定要充分考虑。

所以DMA对于系统的运行效率究竟提高多少是需要论证的,尤其对于总线结构的SMP系统而言,DMA对于系统效率的影响更要小心论证。

论坛徽章:
0
112 [报告]
发表于 2006-08-19 15:51 |只看该作者
没仔细研究过,我认为最重要的一点是数据库采用了索引,
查找速度很快。也就是取某个记录时,能快速在文件中定位。

论坛徽章:
0
113 [报告]
发表于 2006-08-21 10:23 |只看该作者
数据库系统 在存取大批量数据的时候,多数情况下都比由操作系统管理文件系统快。

论坛徽章:
0
114 [报告]
发表于 2006-08-21 14:47 |只看该作者
还是那个小品文写得不错

论坛徽章:
0
115 [报告]
发表于 2006-11-12 16:29 |只看该作者

回复 1楼 eye_onme 的帖子

除了利用raw IO直接写文件外,还有很重要的一点就是DBMS会利用B+ B-树等结构来组织文件中数据的结构 这样在更新,删除以及增加操作时速度会更快

论坛徽章:
0
116 [报告]
发表于 2006-11-12 18:49 |只看该作者
数据库通过主要两种途径提高IO性能.
1.把IO动作尽可能的在自己的BUFFER里面实现,对于必须的物理IO操作,通过对要写入的数据的预先组织(预先读取,按物理顺序排队,分块写入,小数据量写入等操作实现,比如对P-LOG和LOGIAL LOG).
2.对于物理IO动作,db可以通过RAW/COOKED设备来实现,在RAW设备上操作的话,DB自己管理设备以及数据在RAW设备上的存储细节,也就是说DB对于实际的物理存储是了解的,比如说,有2块DEVICE,上面各自分别有2个RAW DEVICES,那么DB可以用2个THREAD在2个DEVICE上面同时动作,对于同一DEVICE上面的LOGICAL VOLUM,DB对数据的预先安排可以大大提高IO性能.而文件系统上的IO由于有DOUBLE-BUFFER,所以数据库所有对IO的优化基本上没作用(因为DB的BUFFER通常比os的io BUFFER大的多,当DB BUFFER对应的OS BUFFER映射失败的时候,IO就要通过物理IO来完成了,并且DB并不知道实际的IO操作在物理设备上的实现细节(比如文件系统在物理设备上的位置)).
3.所有物理的IO动作最后还是对应到了READ/WRITE操作,只不过在RAW方式下的READ/WRITE是对设备直接操作的,不需要借助于文件系统实现.

描述得太复杂了,其实事情本来并没这么乱。很简单:

write 是操作系统提供的系统调用,用不用到缓冲其实并不重要。数据库系统在写硬盘时也调用write,当查询处于事务处理方式时,write之后再调用一下另一个系统调用sync(),这样read/write所使用的buffer被立即提交,也即硬盘与内存同步了。换句话说,数据库系统在写操作时,并不设置fcntl()是否缓冲,而是每write一次就跟随一次sync(),以此来保证内存数据与硬盘数据的一致性和完整性。

至于性能,数据库是没有速度性能可言的。

论坛徽章:
0
117 [报告]
发表于 2006-11-13 17:40 |只看该作者
原帖由 北京野狼 于 2005-4-14 10:50 发表


你应该做过实验再发表评论.写个程序读写数据库和文件个10万次。
必定是几十倍甚至百倍的差别.
记住各自只有一行记录比较,不需要检索,和数据库的应用设计毫无关系.即便大量数据检索,数据库没有索引效率 ...


呵呵,似乎有道理。

[ 本帖最后由 gucuiwen 于 2006-11-13 17:43 编辑 ]

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

不是绕过文件系统,而是绕过文件系统的cache

论坛徽章:
0
119 [报告]
发表于 2007-01-29 14:30 |只看该作者
原帖由 bennie 于 2005-11-26 12:12 发表
写个小品文:

在遥远的古希腊,有一天柏拉图正在学院里看书,停下来休息的时候,正看到他的学生亚里士多德从外面走来。
亚:老师,马其顿王刚才有个任务交给我们,让我们处理一下学院内所有学生的资料。老师, ...


牛!!!!

论坛徽章:
0
120 [报告]
发表于 2007-01-30 03:05 |只看该作者
现在的文件系统都朝数据库方向迈进了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP