思一克 发表于 2005-04-11 12:10

读写文件不是效率很低的嘛,那么数据库为何效率高呢

direct-io也用系统调用read, write吧。
哪个数据库不用系统调用读写文件,而自己读写磁盘? 请给出具体例子。

bleem1998 发表于 2005-04-11 12:55

读写文件不是效率很低的嘛,那么数据库为何效率高呢

不是传统意义上的read/write了
没有了VFS维护的各种cache和buffer
即使没有ext3之类的日志文件系统
如果出现掉电数据也不会丢失

albcamus 发表于 2005-04-11 12:59

读写文件不是效率很低的嘛,那么数据库为何效率高呢

嗯,不经过陷入内核,数据在外设和用户空间之间直接传输。
组成原理忘了大半了,似乎跟DMA控制有关吧?

lenovo 发表于 2005-04-11 13:38

读写文件不是效率很低的嘛,那么数据库为何效率高呢

原帖由 "思一克" 发表:
direct-io也用系统调用read, write吧。
哪个数据库不用系统调用读写文件,而自己读写磁盘? 请给出具体例子。

你说的对,我理解错了。 :oops:
不过具体的我也不懂,到底数据在数据库
和硬盘之间是怎么传输的。是使用DMA吗?

思一克 发表于 2005-04-11 13:50

读写文件不是效率很低的嘛,那么数据库为何效率高呢

To lenovo,
我也不是很清楚,我也不熟悉DB。只是觉得不大相信和明白

JohnBull 发表于 2005-04-11 13:57

读写文件不是效率很低的嘛,那么数据库为何效率高呢

牺牲空间换取时间呗。

北京野狼 发表于 2005-04-11 19:52

读写文件不是效率很低的嘛,那么数据库为何效率高呢

第一次听说数据库比文件系统效率高。

正常情况读写文件系统比数据库快一到两个数据级

柳五随风 发表于 2005-04-11 21:37

读写文件不是效率很低的嘛,那么数据库为何效率高呢

数据库通过主要两种途径提高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是对设备直接操作的,不需要借助于文件系统实现.

FH 发表于 2005-04-11 22:46

读写文件不是效率很低的嘛,那么数据库为何效率高呢

原帖由 "北京野狼" 发表:
第一次听说数据库比文件系统效率高。

正常情况读写文件系统比数据库快一到两个数据级

严重同意!

zerozero_nine 发表于 2005-04-11 23:56

读写文件不是效率很低的嘛,那么数据库为何效率高呢

主要原因是CACHE, 有空档才读写 I / O, DIRECT I/O相信是避免其它不明因素影响读写的完整性.
页: 1 [2] 3 4 5 6 7 8 9 10 11
查看完整版本: 读写文件不是效率很低的嘛,那么数据库为何效率高呢