Tiempo de Acceso
1. Tiempo de Acceso #
El tiempo de acceso es un factor clave en la optimización del código. Dependiendo del tipo de acceso que se realice, el rendimiento del programa puede verse afectado significativamente. Algunos de los accesos más costosos incluyen:
- Acceso a bases de datos
- Acceso a archivos en disco
- Acceso a memoria (RAM vs caché)
- Acceso a redes (API, peticiones HTTP)
Optimizar estos accesos reduce el tiempo de ejecución del programa y mejora su eficiencia.
2. Acceso a Archivos: Minimizar las Operaciones de Entrada Salida (I O) #
La lectura y escritura en disco son operaciones lentas en comparación con la memoria RAM. Para mejorar la eficiencia, debemos minimizar los accesos al disco.
Ejemplo incorrecto: Lectura de un archivo byte a byte #
Este código lee el archivo una línea a la vez, lo cual es ineficiente si se debe leer un archivo grande.
Ejemplo optimizado: Uso de buffers para mejorar la lectura #
En lugar de leer carácter por carácter, se lee en bloques grandes, lo que mejora la eficiencia.
3. Acceso a Bases de Datos: Evitar Conexiones Repetidas #
Abrir y cerrar conexiones de bases de datos repetidamente puede degradar el rendimiento. Es mejor utilizar una única conexión para múltiples consultas.
Ejemplo incorrecto: Abrir y cerrar la conexión en cada consulta #
Ejemplo optimizado: Uso de conexión persistente #
Abrimos la conexión una sola vez y la reutilizamos para múltiples consultas.
4. Acceso a Redes: Optimizar Peticiones HTTP #
Cada solicitud HTTP tiene un costo alto en latencia, por lo que es mejor evitar peticiones innecesarias y usar caché.
Ejemplo incorrecto: Realizar múltiples peticiones innecesarias #
Ejemplo optimizado: Uso de caché para reducir llamadas innecesarias #
Resumen del tema
Conceptos clave #
- Jerarquía y Latencia de Acceso: la memoria caché y RAM son órdenes de magnitud más rápidas que el disco, base de datos y red.
- Operaciones de E/S en Disco: usar buffers (
BufferedReader, lecturas por bloques o líneas completas) en lugar de lecturas byte a byte. - Gestión de Conexiones de Base de Datos: evitar aperturas/cierres recurrentes por consulta implementando Connection Pooling y conexiones persistentes.
- Optimización de Red y APIs: implementar almacenamiento en caché local (caching) y procesamiento en lotes (batching) para mitigar la latencia HTTP.
Qué debes recordar #
Minimiza las operaciones de I/O en disco usando buffers, reutiliza conexiones a bases de datos mediante pools y aplica caché a peticiones de red repetitivas.