Guida alla cache del database
Panoramica
Una Database Cache è una tabella di informazioni pre-calcolate usata per migliorare le prestazioni del database memorizzando e recuperando dati calcolati in un archivio ad alte prestazioni. Pensa a un database come a una serie di tabelle di fogli di calcolo collegate da punti di riferimento: più dati contiene ciascuna tabella, più tempo serve per calcolare i risultati. Invece di ricalcolare su richiesta e su più tabelle per ogni query, la cache memorizza risultati pre-calcolati così che il server del database possa rispondere rapidamente.
In PokerTracker 4 la cache velocizza report e grafici, ma il suo vantaggio è più evidente nell'HUD. Le query con cache e senza cache vengono gestite separatamente, quindi una statistica che usa colonne senza cache viene calcolata al volo e il suo aggiornamento nell'HUD subisce un ritardo man mano che vengono importate nuove mani — le statistiche HUD con cache continuano comunque a comparire separatamente non appena sono disponibili.
Report e grafici, invece, non vengono caricati in fasi separate, quindi una singola statistica senza cache rallenta il tempo di caricamento dell'intero report o grafico.
Ricostruire la Database Cache
Occasionalmente la cache del database diventa obsoleta, il che può causare problemi nell'HUD. Ricostruire la cache dovrebbe risolvere il problema.
Ricostruisci la cache per il database attivo
- In PT4, apri File > Database > Database Management.
- Fai clic su Rebuild Cache.
- Scegli Full Cache Rebuild.
La ricostruzione potrebbe richiedere del tempo, a seconda delle dimensioni del database e delle prestazioni del computer.
Ricostruzione della cache di altri database
La cache è archiviata separatamente per ciascun database e la ricostruzione interessa solo il database attualmente attivo. Per ricostruire la cache di un altro database, impostalo come database attivo e ripeti i passaggi sopra.
Ripeti questa procedura per ogni database singolarmente — non esiste un modo per ricostruire tutte le cache contemporaneamente.
Stats and Columns
Una stat è un calcolo matematico dei dati ricavati dalle colonne di PokerTracker 4. La maggior parte delle stat in cache divide il valore della colonna del database che conta quante volte è stata eseguita un'azione per la colonna che conta le opportunità per quell'azione.
La parola "Column" è usata in due modi correlati. Le PokerTracker 4 Columns si trovano nella pagina Columns nella finestra Statistics Configuration. Le Database Columns fanno parte del database stesso e vengono create solo quando una stat viene memorizzata nella cache.
I database sono composti da tabelle e le tabelle sono composte da colonne del database — un po' come nell'analogia del foglio di calcolo sopra. Le stat sono "oggetti" di PokerTracker 4 che non esistono nel database; vengono costruite a partire dalle PokerTracker 4 Columns, il che consente a più stat di condividere gli stessi blocchi di costruzione senza che questi blocchi siano memorizzati nel database. Quando abiliti la cache per una colonna personalizzata, il Database Cache crea una Database Column corrispondente.
Il Database Cache di PokerTracker 4
Prendiamo come esempio la stat 3Bet Preflop. Divide il numero di volte in cui un player ha effettuato una 3Bet (memorizzato nella colonna cnt_p_3bet) per il numero di opportunità avute per farla (memorizzato in cnt_p_3bet_opp), quindi moltiplica per 100 per mostrare il risultato come percentuale.
(cnt_p_3bet / cnt_p_3bet_opp) * 100 = 3Bet Preflop %
Sia cnt_p_3bet sia cnt_p_3bet_opp sono in cache, consentendo a PostgreSQL di pre-calcolarli così che la stat appaia nell'HUD quasi istantaneamente.
La maggior parte delle colonne usate dalle stat predefinite integrate è in cache. Fanno eccezione le stat che richiedono post-processing: le stat By Time come Real Hours (comunemente usate nei report raggruppati By Date) non sono in cache.
Le custom stat che usano colonne predefinite sono in genere in cache. Le custom stat che si basano su colonne personalizzate, però, non potevano essere memorizzate in cache prima di PokerTracker 4.11 — la prima versione che ha permesso di mettere in cache le colonne personalizzate di PokerTracker 4. Dalla 4.11 in poi, le prestazioni di HUD e report sono più rapide per gli utenti che aggiungono custom stat create da loro o stat gratuite dal PokerTracker Download Warehouse, così come per gli utenti di HUD Premium di terze parti come CoffeeHUD e ProPokerHUD.
Prendi come esempio la stat Delayed (Turn) CBet dal Download Warehouse:
(cnt_t_delayed_cbet / cnt_t_delayed_cbet_opp) * 100
Questa stat usa due colonne personalizzate: cnt_t_delayed_cbet (quante volte il player ha ritardato la propria CBet fino al Turn) e cnt_t_delayed_cbet_opp (le opportunità che aveva per farlo). Nessuna delle due esiste nello schema predefinito del database, quindi entrambe non sono in cache in PokerTracker 4.10.9 e versioni precedenti — ma sono in cache se la stat viene importata nella 4.11 o successiva.
Per verificare se una colonna è in cache, vai su Configure > Statistics, scegli Cash Games o Tournaments, poi Players o Hands, e seleziona Columns. Trova la colonna e verifica che la casella Cache sia selezionata.

Quando importi una custom stat, PokerTracker 4 abilita la cache per ogni colonna che può essere memorizzata in cache. Gli sviluppatori che definiscono nuove colonne, invece, devono abilitare manualmente la casella Cache sul proprio computer.
Quando una Colonna Non Può Essere Messa in Cache
Non tutte le colonne possono essere memorizzate in cache. PokerTracker 4 esamina ogni custom stat importata e abilita automaticamente la cache quando una colonna è cachabile. Se crei una custom stat con una colonna che non può essere memorizzata in cache, appare un messaggio di errore che indica che la stat non è cachabile.
Non viene mostrato alcun avviso all'utente quando una colonna semplicemente non è cachabile — il messaggio di errore qui sotto è destinato agli sviluppatori di custom stat. Chi importa occasionalmente custom stat predefinite si affida allo sviluppatore, che è responsabile delle decisioni sulla cache.

Eccezioni della Cache
I seguenti tipi di espressione non possono essere memorizzati in cache.
1. Subquery. Ad esempio:
exists (select 1 from cash_hand_player_statistics chps where chps.flg_hero and chps.id_hand = cash_hand_player_statistics.id_hand)
Una subquery collega tra loro colonne di tabelle diverse. Se fosse messa in cache, l'aggiornamento di quella colonna rileggerebbe gran parte del database per ogni player alla fine di ogni hand — troppo lento per essere usato in-game. Anche se una subquery richiedesse solo 1ms per player, un database da 100 player aggiungerebbe 100ms per hand durante l'importazione (accettabile), ma un database da 10.000 player aggiungerebbe 10 secondi per hand (inaccettabile).
Le colonne che contengono subquery sono comunque consentite, ma aspettati che qualsiasi stat che ne abbia bisogno abbia prestazioni scarse come prima della 4.11.
2–5. Riferimenti a tabelle senza cash_hand_player_statistics. Un riferimento a uno dei seguenti può essere messo in cache solo se l'espressione fa riferimento anche a cash_hand_player_statistics:
- cash_hand_summary
- cash_hand_player_combinations
- cash_limit
- cash_table_session_summary
PokerTracker 4 deve poter scomporre le stat cachabili per posizione assoluta, in posizione/fuori posizione per le stat post-flop, per stake e per data. Senza un riferimento esplicito a cash_hand_player_statistics, quella tabella non può essere collegata — e quel collegamento è ciò che fornisce i dettagli su posizione, stake e data.
Questa espressione può essere messa in cache, perché fa riferimento sia a cash_hand_summary sia a cash_hand_player_statistics:
sum(if[cash_hand_player_statistics.flg_f_saw and cash_hand_summary.amt_mgr > 0, 1, 0])
Questa espressione non può essere messa in cache, perché fa riferimento a cash_hand_summary senza il necessario cash_hand_player_statistics:
sum(if[cash_hand_summary.amt_mgr > 0, 1, 0])
6. Riferimenti a lookup_positions. Questa lookup table non può essere usata nella cache personalizzata; prova invece direttamente cash_hand_player_statistics.position. Richiede un po' di lavoro in più per costruire le posizioni EP e MP, ma è necessario affinché le stat funzionino correttamente. Altre lookup table vanno bene — in particolare lookup_actions_p, lookup_actions_f, lookup_actions_t e lookup_actions_r.
7. Stat sui risultati dei tornei come ROI e ITM, perché possono essere memorizzate in cache solo colonne basate sulle hand.
8. Stat "Group By" — stat usate solo per suddividere i report in più righe. Sono progettate per i report, non per gli HUD.