Saltar al contenido principal

Guía de caché de la base de datos

Resumen

Una caché de base de datos es una tabla de información precalculada que se usa para mejorar el rendimiento de la base de datos almacenando y recuperando datos calculados en un repositorio de alto rendimiento. Piensa en una base de datos como una serie de tablas de hoja de cálculo unidas por puntos de referencia: mientras más datos contenga cada tabla, más tarda en calcular resultados. En lugar de recalcular bajo demanda a través de varias tablas en cada consulta, la caché almacena resultados precalculados para que el servidor de la base de datos pueda responder rápidamente.

En PokerTracker 4, la caché acelera los reportes y gráficos, pero su beneficio es más evidente en el HUD. Las consultas en caché y sin caché se administran por separado, así que una stat que usa columnas sin caché se calcula sobre la marcha y su actualización en el HUD se retrasa a medida que se importan nuevas manos; las stats del HUD en caché siguen apareciendo por separado tan pronto como están disponibles.

Los reportes y gráficos, sin embargo, no se cargan en etapas separadas, por lo que una sola stat sin caché ralentiza el tiempo de carga de todo el reporte o gráfico.

Reconstrucción de la caché de la base de datos

Ocasionalmente la caché de la base de datos queda desactualizada, lo que puede causar problemas en el HUD. Reconstruir la caché debería resolver el problema.

Reconstruir la caché de la base de datos activa

  1. En PT4, abre File > Database > Database Management.
  2. Haz clic en Rebuild Cache.
  3. Elige Full Cache Rebuild.
nota

La reconstrucción puede tardar un tiempo, según el tamaño de tu base de datos y el rendimiento de tu computadora.

Reconstrucción de otras bases de datos

La caché se almacena por separado para cada base de datos, y una reconstrucción solo afecta a la base de datos activa en ese momento. Para reconstruir la caché de otra base de datos, establécela como base de datos activa y repite los pasos anteriores.

tip

Repite esto para cada base de datos de forma individual; no hay forma de reconstruir todas las cachés a la vez.

Stats y columnas

Una stat es un cálculo matemático de datos obtenidos de columnas de PokerTracker 4. La mayoría de las stats en caché dividen la columna de la base de datos que cuenta cuántas veces se realizó una acción entre la columna que cuenta las oportunidades para esa acción.

La palabra "Column" se usa de dos maneras relacionadas. Las PokerTracker 4 Columns están en la página Columns de la ventana Statistics Configuration. Las Database Columns forman parte de la propia base de datos y solo se crean una vez que una stat queda en caché.

Las bases de datos están formadas por tablas, y las tablas están formadas por columnas de base de datos, de forma similar a la analogía de la hoja de cálculo anterior. Las stats son "objetos" de PokerTracker 4 que no existen en la base de datos; se construyen a partir de PokerTracker 4 Columns, lo que permite que varias stats compartan los mismos bloques de construcción sin que esos bloques se almacenen en la base de datos. Cuando habilitas la caché para una columna personalizada, Database Cache crea una Database Column correspondiente.

La caché de base de datos de PokerTracker 4

Toma como ejemplo la stat 3Bet Preflop. Divide la cantidad de veces que un jugador hizo 3Bet (almacenada en la columna cnt_p_3bet) entre la cantidad de oportunidades que tuvo para hacer 3Bet (almacenada en cnt_p_3bet_opp), y luego multiplica por 100 para mostrar el resultado como porcentaje.

(cnt_p_3bet / cnt_p_3bet_opp) * 100 = 3Bet Preflop %

Tanto cnt_p_3bet como cnt_p_3bet_opp están en caché, lo que permite que PostgreSQL los precalcule para que la stat aparezca en el HUD casi al instante.

La mayoría de las columnas usadas por las stats integradas predeterminadas están en caché. La excepción son las stats que requieren posprocesamiento: las stats By Time como Real Hours (comúnmente usadas en reportes agrupados By Date) no están en caché.

Las stats personalizadas que usan columnas predeterminadas suelen estar en caché. Sin embargo, las stats personalizadas que dependen de columnas personalizadas no podían estar en caché antes de PokerTracker 4.11, la primera versión que permitió cachear columnas personalizadas de PokerTracker 4. En 4.11 y versiones posteriores, el rendimiento del HUD y de los reportes es más rápido para los usuarios que agregan stats personalizadas hechas por ellos mismos o stats gratuitas del PokerTracker Download Warehouse, así como para los usuarios de HUDs Premium de terceros como CoffeeHUD y ProPokerHUD.

Considera la stat Delayed (Turn) CBet del Download Warehouse:

(cnt_t_delayed_cbet / cnt_t_delayed_cbet_opp) * 100

Esta stat usa dos columnas personalizadas: cnt_t_delayed_cbet (cuántas veces el jugador retrasó su CBet hasta el Turn) y cnt_t_delayed_cbet_opp (las oportunidades que tuvo para hacerlo). Ninguna existe en el esquema predeterminado de la base de datos, así que ambas no están en caché en PokerTracker 4.10.9 y versiones anteriores; pero sí están en caché si la stat se importa en 4.11 o posterior.

Para verificar si una columna está en caché, ve a Configure > Statistics, elige Cash Games o Tournaments, luego Players o Hands, y selecciona Columns. Busca la columna y confirma que la casilla Cache esté marcada.

PokerTracker 4 Cache

Al importar una stat personalizada, PokerTracker 4 habilita la caché para cada columna que puede almacenarse en caché. Sin embargo, los desarrolladores que definen nuevas columnas deben marcar manualmente la casilla Cache en su propia computadora.

Cuando una columna no puede estar en caché

No todas las columnas pueden estar en caché. PokerTracker 4 revisa cada stat personalizada importada y habilita automáticamente la caché cuando una columna es compatible con caché. Si creas una stat personalizada con una columna que no puede estar en caché, aparecerá un mensaje de error indicando que la stat no es compatible con caché.

No hay un aviso visible para el usuario cuando una columna simplemente no es compatible con caché; el mensaje de error de abajo está pensado para desarrolladores de stats personalizadas. Quienes importan stats personalizadas predefinidas dependen del desarrollador, que es responsable de las decisiones de caché.

Unable to cache column

Excepciones de caché

Los siguientes tipos de expresiones no pueden estar en caché.

1. Subconsultas. Por ejemplo:

exists (select 1 from cash_hand_player_statistics chps where chps.flg_hero and chps.id_hand = cash_hand_player_statistics.id_hand)

Una subconsulta vincula columnas de diferentes tablas entre sí. Si se almacenara en caché, actualizar esa columna volvería a leer la mayor parte de la base de datos para cada jugador al final de cada mano, demasiado lento para usar en juego. Incluso si una subconsulta tardara solo 1 ms por jugador, una base de datos de 100 jugadores añadiría 100 ms por mano durante la importación (aceptable), pero una base de datos de 10,000 jugadores añadiría 10 segundos por mano (inaceptable).

Todavía se permiten columnas que contienen subconsultas, pero espera que cualquier stat que necesite una rinda tan mal como antes de 4.11.

2–5. Referencias a tablas sin cash_hand_player_statistics. Una referencia a cualquiera de las siguientes solo puede estar en caché si la expresión también hace referencia a cash_hand_player_statistics:

  • cash_hand_summary
  • cash_hand_player_combinations
  • cash_limit
  • cash_table_session_summary

PokerTracker 4 debe poder desglosar las stats compatibles con caché por posición absoluta, por estar dentro o fuera de posición en stats de postflop, por nivel de ciegas y por fecha. Sin una referencia explícita a cash_hand_player_statistics, esa tabla no puede unirse, y esa unión es la que aporta los detalles de posición, nivel de ciegas y fecha.

Esta expresión puede estar en caché, porque hace referencia tanto a cash_hand_summary como a cash_hand_player_statistics:

sum(if[cash_hand_player_statistics.flg_f_saw and cash_hand_summary.amt_mgr > 0, 1, 0])

Esta expresión no puede estar en caché, porque hace referencia a cash_hand_summary sin la necesaria cash_hand_player_statistics:

sum(if[cash_hand_summary.amt_mgr > 0, 1, 0])

6. Referencias a lookup_positions. Esta tabla de búsqueda no puede usarse en la caché personalizada; prueba directamente cash_hand_player_statistics.position. Esto requiere un poco más de trabajo para construir las posiciones EP y MP, pero es necesario para que las stats funcionen correctamente. Otras tablas de búsqueda están bien, en especial lookup_actions_p, lookup_actions_f, lookup_actions_t y lookup_actions_r.

7. Stats de resultados de torneos, como ROI e ITM, porque solo se pueden almacenar en caché columnas basadas en manos.

8. Stats "Group By": stats que solo se usan para dividir reportes en varias filas. Están diseñadas para reportes, no para HUDs.