<?xml version="1.0" encoding="utf-8"?>
<chapter>
    <title>Búsquedas de disco consideradas dañinas</title>

    <para>Las búsquedas de disco son una de las operaciones más caras que puede realizar. Puede que no sepa esto simplemente mirando cuántas se realizan, pero crea que realmente lo son. Por ello, evite los siguientes comportamientos:</para>
    <itemizedlist>
        <listitem>
            <para>Ubicar montones de pequeños archivos por todo el disco.</para>
        </listitem>
        <listitem>
            <para>Abrir, iniciar y leer montones de archivos por todo el disco.</para>
        </listitem>
        <listitem>
            <para>Realizar lo anterior sobre archivos que se abren en diferentes momentos, para asegurarse de que están fragmentados y causan aún más búsqueda del disco.</para>
        </listitem>
        <listitem>
            <para>Realizar lo siguiente sobre archivos que están en diferentes directorios, para asegurarse de que están en grupos de cilindros diferentes y pueden causar incluso más búsqueda.</para>
        </listitem>
        <listitem>
            <para>Realizar repetidamente lo anterior cuando sólo se necesita realizar una vez.</para>
        </listitem>
    </itemizedlist>
    <para>Formas en las que puede optimizar su código para que sea amigable a la hora de hacer búsquedas:</para>
    <itemizedlist>
        <listitem>
            <para>Consolidar los datos en un solo archivo.</para>
        </listitem>
        <listitem>
            <para>Mantener los datos juntos en el mismo directorio.</para>
        </listitem>
        <listitem>
            <para>Cachear los datos para no tener que volver a leerlos constantemente.</para>
        </listitem>
        <listitem>
            <para>Compartir los datos para no tener que volver a leerlos del disco cada vez que una aplicación se carga.</para>
        </listitem>
        <listitem>
            <para>Considerar cachear todos los datos en un archivo binario único que está alineado apropiadamente y se puede mapear.</para>
        </listitem>
    </itemizedlist>
    <para>El problema de las búsquedas en los discos se complica para las lecturas, que es desafortunadamente lo que se busca. Recuerde, las lecturas son generalmente síncronas mientras que las escrituras son asíncronas. Esto sólo complica el problema, serializando cada lectura y contribuyendo a la latencia del programa.</para>
</chapter>
