当前位置: 技术问答>linux和unix
来一个高难的问题:怎样能保证文件的物理连续存储?或者说如何能最大限度提高文件I/O的效率?
来源: 互联网 发布时间:2015-11-22
本文导语: 我现在要处理一个包含上千万条记录的文件,每条记录都是二进制固定长度写入文件的。由于每天都会生成这样一个文件,因此对文件的检索效率就非常重要。我现在想文件在写入时保证文件在硬盘中是连续存储的,...
我现在要处理一个包含上千万条记录的文件,每条记录都是二进制固定长度写入文件的。由于每天都会生成这样一个文件,因此对文件的检索效率就非常重要。我现在想文件在写入时保证文件在硬盘中是连续存储的,这应该能提高效率吧。可是查了一下,发现微软的系统都提供C语言的此类函数支持,可是Linux好像找不到。
Linux中能够实现对磁盘的绝对读写吗?
如果您有什么好的建议能够提高文件检索的效率,请不吝赐教,不胜感激!
Linux中能够实现对磁盘的绝对读写吗?
如果您有什么好的建议能够提高文件检索的效率,请不吝赐教,不胜感激!
|
如楼上所说,改进算法很重要。比如你可以在每个文件头建立索引表,或者专门创建一个文件存放索引表。或者干脆用数据库来保存你的数据。
索引的时候也可以用一些技巧,不太清楚你的具体数据结构,举个例子,你可以所有相同字母的数据存到同一文件。
也可以使用裸设备(row device),比如oracel就可以使用此类设备。
所谓裸设备,是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。它由应用程序负责对它进行读写操作。不经过文件系统的缓冲。 你需要一个未经格式化的分区作为裸设备。
不过使用裸设备不一定比文件快,因为文件系统本身也有很好的缓冲。除非有非常频繁的磁盘I/O,而不是大量的顺序文件读写。另一方面,使用裸设备也需要自己实现类似文件系统的功能,所以会比较复杂。
另外,不知道你说的windows下的相关调用是什么呢?
索引的时候也可以用一些技巧,不太清楚你的具体数据结构,举个例子,你可以所有相同字母的数据存到同一文件。
也可以使用裸设备(row device),比如oracel就可以使用此类设备。
所谓裸设备,是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。它由应用程序负责对它进行读写操作。不经过文件系统的缓冲。 你需要一个未经格式化的分区作为裸设备。
不过使用裸设备不一定比文件快,因为文件系统本身也有很好的缓冲。除非有非常频繁的磁盘I/O,而不是大量的顺序文件读写。另一方面,使用裸设备也需要自己实现类似文件系统的功能,所以会比较复杂。
另外,不知道你说的windows下的相关调用是什么呢?
|
根据需要设计文件系统,比如swap分区就是独特的。freebsd的/var分区,oracle、clearcase等等这样及其依赖存储的应用都是自己管理文件系统。
|
还不如提高你的算法效率,另外建立一张索引表,可以提高查找速率
|
"我现在想文件在写入时保证文件在硬盘中是连续存储的",不懂,你的文件每天都在生成,你是说让你每天生成的文件都让其连续存储吗?
“发现微软的系统都提供C语言的此类函数支持”,这个又是指什么呢?
我觉得这主要取决文件系统吧。文件系统如何定义,怎样来分配存储。
“发现微软的系统都提供C语言的此类函数支持”,这个又是指什么呢?
我觉得这主要取决文件系统吧。文件系统如何定义,怎样来分配存储。
|
做裸设备应该是最高性能的选择了。