有人可以帮助我理解寻求硬盘驱动器的工作原理。数据库结构和硬盘驱动器寻找时间混淆
我有一个小的二进制数据库文件,读取性能是绝对必要的。如果我需要跳过文件中的几个字节,则使用seek()或read()可以更快地放弃不需要的数据。
如果硬盘驱动器的平均寻道时间是10ms,读取速度是300MB/s,我计算出它比seek()小于3MB的读取速度更快。是真的?执行新的查找时是否有开销,读取现有的流时没有?
你认为哪种索引更合适的文件结构?
Entry1:Value:PointerIntoToData
Entry2:Value:PointerIntoToData
Entry3:Value:PointerIntoToData
Data, Data, Data
Or
Entry1:Value:Data
Entry2:Value:Data
Entry3:Value:Data
当读取条目时,如果该值不正确,它将被忽略。因此,当流式传输文件更快: 1.当不需要条目时,使用seek()跳过它 2.当不需要条目时读取它然后丢弃数据 3.或使用第一个结构,当一个条目需要seek()到最后的数据仓库。
入口是4个字节,值8个字节的数据&是12KB
干杯
不,我还没有测试过程序,它仍在研究不同的文件结构。每毫秒都很重要,我对理论最大值感兴趣。那么你认为我需要一个可用的测试环境吗?硬盘驱动器可能来自另一个进程的负载。谢谢 – user72523 2009-03-01 20:32:23
如果您按照您的声明,每毫秒计数一次,请尝试将数据库读入内存。你说它很小(你引用3M),所以应该很容易适合你的系统内存。 但是,您仍然必须确定速度是否是真实或想象的要求;即为什么你需要速度? – 2009-03-01 20:41:29