Guía de caché de bases de datos
Resumen
Una caché de base de datos es una tabla de información precalculada que se utiliza 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: cuanto más datos contiene cada tabla, más tarda en calcular resultados. En lugar de recalcular bajo demanda a través de varias tablas para 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 reports y los gráficos, pero su beneficio es más evidente en el HUD. Las consultas con caché y sin caché se gestionan por separado, de modo que una stat que usa columnas sin caché se calcula al vuelo y su actualización en el HUD se retrasa a medida que se importan nuevas manos; las stats del HUD con caché siguen apareciendo por separado en cuanto están disponibles.
Sin embargo, los reports y los gráficos no se cargan en fases separadas, por lo que una sola stat sin caché ralentiza el tiempo de carga de todo el report 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é para la base de datos activa
- En PT4, abre Archivo > Base de datos > Administración de bases de datos.
- Haz clic en Reconstruir caché.
- Elige Reconstrucción completa de la caché.
La reconstrucción puede tardar un tiempo, según el tamaño de tu base de datos y el rendimiento de tu equipo.
Reconstruir 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 actualmente activa. Para reconstruir la caché de otra base de datos, selecciónala como base de datos activa y repite los pasos anteriores.
Repite esto para cada base de datos de forma individual; no hay forma de reconstruir todas las cachés a la vez.
Stats y Columns
Una stat es un cálculo matemático de datos extraídos de las columnas de PokerTracker 4. La mayoría de las stats con caché dividen la columna de la base de datos que cuenta cuántas veces se realizó una acción por la columna que cuenta las oportunidades para esa acción.
La palabra "Column" se utiliza de dos formas 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 se almacena en caché.
Las bases de datos están formadas por tablas, y las tablas están formadas por columnas de base de datos, igual que en 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 activas la caché para una columna personalizada, la Database Cache crea una Database Column correspondiente.
La Database Cache de PokerTracker 4
Tomemos como ejemplo la stat 3Bet Preflop. Divide el número de veces que un jugador hizo 3Bet (almacenado en la columna cnt_p_3bet) entre el número de oportunidades que tuvo para hacer 3Bet (almacenado 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 tienen caché, lo que permite a PostgreSQL precomputarlos para que la stat aparezca en el HUD casi al instante.
La mayoría de las columnas usadas por defecto en las stats integradas tienen caché. La excepción son las stats que requieren postprocesado: las stats By Time, como Real Hours (que se usan comúnmente en reports agrupados By Date), no tienen caché.
Las stats personalizadas que usan columnas predeterminadas suelen tener caché. Sin embargo, las stats personalizadas que dependen de columnas personalizadas no podían almacenarse en caché antes de PokerTracker 4.11, la primera versión que permitió almacenar en caché columnas personalizadas de PokerTracker 4. En 4.11 y posteriores, el rendimiento del HUD y de los reports es más rápido para los usuarios que añaden stats personalizadas propias 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 de base de datos predeterminado, así que ambas no tienen caché en PokerTracker 4.10.9 y anteriores; pero sí la tienen si la stat se importa en 4.11 o posterior.
Para comprobar si una columna tiene caché, ve a Configurar > Statistics, elige Cash Games o Tournaments, luego Players o Hands, y selecciona Columns. Busca la columna y confirma que la casilla Cache está marcada.

Al importar una stat personalizada, PokerTracker 4 activa la caché para cada columna que puede almacenarse en caché. Sin embargo, los desarrolladores que definan nuevas columnas deben marcar manualmente la casilla Cache en su propio equipo.
Cuando una Column no puede almacenarse en caché
No todas las columnas pueden almacenarse en caché. PokerTracker 4 revisa cada stat personalizada importada y activa automáticamente la caché cuando una columna es apta para ello. Si creas una stat personalizada con una columna que no puede almacenarse en caché, aparecerá un mensaje de error indicando que la stat no es apta para caché.
No aparece ningún aviso visible para el usuario cuando una columna simplemente no es apta para caché; el mensaje de error siguiente está pensado para los desarrolladores de stats personalizadas. Quienes importan ocasionalmente stats personalizadas predefinidas dependen del desarrollador, que es responsable de las decisiones sobre la caché.

Excepciones de caché
Los siguientes tipos de expresión no pueden almacenarse 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 distintas tablas. Si se almacenara en caché, actualizar esa columna volvería a leer casi toda la base de datos para cada jugador al final de cada mano, demasiado lento para usarlo durante la partida. Incluso si una subconsulta tardara solo 1 ms por jugador, una base de datos con 100 jugadores añadiría 100 ms por mano durante la importación (aceptable), pero una base de datos con 10.000 jugadores añadiría 10 segundos por mano (inaceptable).
Las columnas que contienen subconsultas siguen estando permitidas, pero cualquier stat que necesite una funcionará igual de mal que antes de 4.11.
2–5. Referencias a tablas sin cash_hand_player_statistics. Una referencia a cualquiera de las siguientes solo puede almacenarse 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 aptas para caché por posición absoluta, en posición/fuera de posición para stats 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 proporciona los detalles de posición, nivel de ciegas y fecha.
Esta expresión sí puede almacenarse 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 almacenarse 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 algo más de trabajo para construir las posiciones EP y MP, pero es necesario para que las stats funcionen correctamente. Las demás tablas de búsqueda están bien; en particular, lookup_actions_p, lookup_actions_f, lookup_actions_t y lookup_actions_r.
7. Stats de resultados de torneo, como ROI e ITM, porque solo pueden almacenarse en caché las columnas basadas en manos.
8. Stats "Group By": stats que solo se usan para dividir reports en varias filas. Están diseñadas para reports, no para HUDs.