原帖由 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特性尤其是事务的原子性,文件系统就很难保证了. |