Blame optimization-guide/zh_CN/harmful.page
Branch: 1470ead63cdc56c84b491edf46f35990ec57fc33
Packit
1470ea
Packit
1470ea
<page xmlns="http://projectmallard.org/1.0/" type="guide" style="task" id="harmful" xml:lang="zh-CN">
Packit
1470ea
<info>
Packit
1470ea
<link type="guide" xref="index#harm"/>
Packit
1470ea
</info>
Packit
1470ea
<title>Disk Seeks Considered Harmful</title>
Packit
1470ea
磁盘寻道是您可能遇到的最昂贵的操作之一。从查看执行的数量,可能不能了解到,但这是真的。相应地,请避免如下次优的选择:
Packit
1470ea
<list type="unordered">
Packit
1470ea
<item>
Packit
1470ea
在磁盘中到处存放很多小文件。
Packit
1470ea
</item>
Packit
1470ea
<item>
Packit
1470ea
在磁盘中,到处打开、查看、读取很多小文件。
Packit
1470ea
</item>
Packit
1470ea
<item>
Packit
1470ea
Packit
1470ea
Doing the above on files that are laid out at different times, so as to ensure that they are fragmented and cause even more seeking.
Packit
1470ea
Packit
1470ea
</item>
Packit
1470ea
<item>
Packit
1470ea
Packit
1470ea
Doing the above on files that are in different directories, so as to ensure that they are in different cylinder groups and cause even more seeking.
Packit
1470ea
Packit
1470ea
</item>
Packit
1470ea
<item>
Packit
1470ea
Packit
1470ea
Repeatedly doing the above when it only needs to be done once.
Packit
1470ea
Packit
1470ea
</item>
Packit
1470ea
</list>
Packit
1470ea
Packit
1470ea
Ways in which you can optimize your code to be seek-friendly:
Packit
1470ea
Packit
1470ea
<list type="unordered">
Packit
1470ea
<item>
Packit
1470ea
Packit
1470ea
Consolidate data into a single file.
Packit
1470ea
Packit
1470ea
</item>
Packit
1470ea
<item>
Packit
1470ea
将数据保持在同一个目录中。
Packit
1470ea
</item>
Packit
1470ea
<item>
Packit
1470ea
缓存数据以避免定期重读数据。
Packit
1470ea
</item>
Packit
1470ea
<item>
Packit
1470ea
共享数据以便不必每个程序需要时都从硬盘读取。
Packit
1470ea
</item>
Packit
1470ea
<item>
Packit
1470ea
考虑将所有的数据缓存在单个二进制文件中,并使文件正确对齐并可以将其 mmap。
Packit
1470ea
</item>
Packit
1470ea
</list>
Packit
1470ea
Packit
1470ea
The trouble with disk seeks are compounded for reads, which is unfortunately what we are doing. Remember, reads are generally synchronous while writes are asynchronous. This only compounds the problem, serializing each read, and contributing to program latency.
Packit
1470ea
Packit
1470ea
</page>