Apply suggestions from code review
apply suggestions Co-Authored-By: martskins <martskins@users.noreply.github.com>
This commit is contained in:
parent
ed670cb672
commit
ec126b7e37
@ -61,7 +61,7 @@ Cuando hayas decidido cambiar tu programa, sigue leyendo.
|
|||||||
### Modificar los datos
|
### Modificar los datos
|
||||||
|
|
||||||
Modificar los datos significa agregar o alterar la representación de los datos
|
Modificar los datos significa agregar o alterar la representación de los datos
|
||||||
que estas procesando. Desde el punto de vista de la performance, algunos de
|
que estas procesando. Desde el punto de vista del rendimiento, algunos de
|
||||||
estos acabaran cambiando la complejidad O() asociada a diferentes aspectos de
|
estos acabaran cambiando la complejidad O() asociada a diferentes aspectos de
|
||||||
la estructura de datos.
|
la estructura de datos.
|
||||||
|
|
||||||
@ -69,16 +69,16 @@ Ideas para mejorar tu estructura de datos:
|
|||||||
|
|
||||||
* Campos adicionales
|
* Campos adicionales
|
||||||
|
|
||||||
El clásico ejemplo de esto es almacenar el largo de una lista enlazada en un
|
El clásico ejemplo de esto es almacenar la longitud de una lista enlazada en un
|
||||||
campo en el nodo raíz. Mantenerla actualizada lleva un poco más de trabajo,
|
campo en el nodo raíz. Mantenerla actualizada lleva un poco más de trabajo,
|
||||||
pero consultar el largo se vuelve un simple field lookup en vez de una
|
pero consultar la longitud se convierte en un simple acceso a un campo en vez de una
|
||||||
operación de complejidad O(n). Tu estructura de datos puede presentar una
|
busqueda transversal con complejidad O(n). Tu estructura de datos puede presentar una
|
||||||
mejora similar: un poco de mantenimiento en algunas operaciones a cambio de
|
mejora similar: un poco de mantenimiento en algunas operaciones a cambio de
|
||||||
mejor la performance en un caso de uso común.
|
mejorar el rendimiento en un caso de uso común.
|
||||||
|
|
||||||
De manera similar, almacenar punteros a nodos frecuentemente utilizados en vez
|
De manera similar, almacenar punteros a nodos frecuentemente utilizados en vez
|
||||||
de realizar búsquedas adicionales. Esto cubre cosas como el link "hacia atrás"
|
de realizar búsquedas adicionales. Esto cubre cosas como el link "hacia atrás"
|
||||||
en una lista doblemente enlazada para eliminación de nodos de complejidad O(1).
|
en una lista doblemente enlazada para hacer que la eliminación de nodos tenga una complejidad O(1).
|
||||||
Algunas listas de salto guardan un "puntero de búsqueda", donde almacenan un
|
Algunas listas de salto guardan un "puntero de búsqueda", donde almacenan un
|
||||||
puntero a donde recientemente estuviste en tu estructura de datos, bajo la
|
puntero a donde recientemente estuviste en tu estructura de datos, bajo la
|
||||||
suposición de que es un buen punto de partida para la siguiente operación.
|
suposición de que es un buen punto de partida para la siguiente operación.
|
||||||
@ -101,11 +101,11 @@ Ideas para mejorar tu estructura de datos:
|
|||||||
la estructura de datos. (Si una búsqueda en tu estructura de datos principal
|
la estructura de datos. (Si una búsqueda en tu estructura de datos principal
|
||||||
es barato, el costo del filtro de Bloom superará cualquier ahorro.)
|
es barato, el costo del filtro de Bloom superará cualquier ahorro.)
|
||||||
|
|
||||||
* Si las búsquedas son costosas, agrega caché
|
* Si las búsquedas son costosas, agrega una cache
|
||||||
|
|
||||||
A mayor escala, una cache interna o externa (como memcache) pueden ayudar.
|
A mayor escala, una cache interna o externa (como memcache) puede ayudar.
|
||||||
Puede ser excesivo para una única estructura de datos. Cubriremos más sobre
|
Puede ser excesivo para una única estructura de datos. Hablaremos más sobre
|
||||||
cache más adelante.
|
caches más adelante.
|
||||||
|
|
||||||
Este tipo de cambios son útiles cuando los datos que necesitan son baratos de
|
Este tipo de cambios son útiles cuando los datos que necesitan son baratos de
|
||||||
almacenar y fáciles de mantener actualizados.
|
almacenar y fáciles de mantener actualizados.
|
||||||
@ -146,13 +146,13 @@ manejen gran cantidad de datos.
|
|||||||
|
|
||||||
Hablaremos más sobre la disposición de datos más adelante.
|
Hablaremos más sobre la disposición de datos más adelante.
|
||||||
|
|
||||||
Las computadoras modernas y la jerarquía de memoria hacen del compromiso
|
Las computadoras modernas y la jerarquía de memoria hacen que el compromiso
|
||||||
memoria/espacio menos claro. Es muy fácil para las tablas de búsqueda estar
|
entre memoria/espacio sea menos claro. Es muy fácil para las tablas de búsqueda estar
|
||||||
"lejos" en memoria (y por ser costosas de acceder) haciendo que sea más rápido
|
"lejos" en memoria (y por lo tanto ser costosas de acceder) haciendo que sea más rápido
|
||||||
simplemente recalcular un valor cada vez que se necesita.
|
simplemente recalcular un valor cada vez que se necesita.
|
||||||
|
|
||||||
Esto también significa que el benchmarking frecuentemente mostrará mejoras que no
|
Esto también significa que el benchmarking frecuentemente mostrará mejoras que no
|
||||||
son realizadas en producción debido a la contención de caché (e.g., tablas de
|
aparecen en producción debido a la contención de cache (e.g., tablas de
|
||||||
búsqueda que estan en la cache del procesador durante el benchmarking pero
|
búsqueda que estan en la cache del procesador durante el benchmarking pero
|
||||||
que siempre son purgadas cuando son utilizadas por un sistema real.)
|
que siempre son purgadas cuando son utilizadas por un sistema real.)
|
||||||
El [Jump Hash paper](https://arxiv.org/pdf/1406.2294.pdf) de Google de hecho
|
El [Jump Hash paper](https://arxiv.org/pdf/1406.2294.pdf) de Google de hecho
|
||||||
@ -166,7 +166,7 @@ acceso a disco y de red es muy lento, y por lo tanto ser capaz de cargar un
|
|||||||
bloque comprimido va a resultar en un proceso mucho más rápido incluso teniendo
|
bloque comprimido va a resultar en un proceso mucho más rápido incluso teniendo
|
||||||
en cuenta el tiempo que lleva descomprimirlo. Como siempre, realiza benchmarks.
|
en cuenta el tiempo que lleva descomprimirlo. Como siempre, realiza benchmarks.
|
||||||
Un formato binario generalmente va a ser mas liviano y rápido de parsear que uno
|
Un formato binario generalmente va a ser mas liviano y rápido de parsear que uno
|
||||||
de texto, pero a costo de no ser legible por un humano.
|
de texto, pero el coste es que no será legible para un humano.
|
||||||
|
|
||||||
Para la transferencia de datos, cambia a un protocol menos verboso, o
|
Para la transferencia de datos, cambia a un protocol menos verboso, o
|
||||||
mejora el API para aceptar consultas parciales. Por ejemplo, usa una consulta
|
mejora el API para aceptar consultas parciales. Por ejemplo, usa una consulta
|
||||||
|
Loading…
Reference in New Issue
Block a user