Aller au contenu principal

Guide du cache de base de données

Vue d’ensemble

Un Database Cache est une table d’informations pré-calculées utilisée pour améliorer les performances de la base de données en stockant et en récupérant des données calculées dans un référentiel haute performance. Imaginez une base de données comme une série de tableaux de type feuille de calcul reliés entre eux par des points de référence : plus chaque tableau contient de données, plus le calcul des résultats prend du temps. Plutôt que de recalculer à la demande, sur plusieurs tableaux, pour chaque requête, le cache stocke des résultats pré-calculés afin que le serveur de base de données puisse répondre rapidement.

Dans PokerTracker 4, le cache accélère les rapports et les graphiques, mais son avantage est surtout visible dans le HUD. Les requêtes avec cache et sans cache sont gérées séparément, donc une statistique qui utilise des colonnes non mises en cache est calculée à la volée et sa mise à jour HUD est retardée au fur et à mesure de l’import de nouvelles mains — les statistiques HUD mises en cache apparaissent toujours séparément dès qu’elles sont disponibles.

Les rapports et les graphiques, en revanche, ne se chargent pas par étapes distinctes, donc une seule statistique non mise en cache ralentit le chargement de l’ensemble du rapport ou du graphique.

Reconstruire le cache de base de données

Il arrive que le cache de la base de données devienne obsolète, ce qui peut provoquer des problèmes de HUD. Reconstruire le cache devrait résoudre le problème.

Reconstruisez le cache pour la base de données active

  1. Dans PT4, ouvrez File > Database > Database Management.
  2. Cliquez sur Rebuild Cache.
  3. Choisissez Full Cache Rebuild.
remarque

La reconstruction peut prendre un certain temps, selon la taille de votre base de données et les performances de votre ordinateur.

Rebuilding other databases

Le cache est stocké séparément pour chaque base de données, et une reconstruction n’affecte que la base de données actuellement active. Pour reconstruire le cache d’une autre base de données, définissez-la comme base de données active et répétez les étapes ci-dessus.

astuce

Répétez cette opération pour chaque base de données individuellement — il n’existe aucun moyen de reconstruire tous les caches en une seule fois.

Stats and Columns

Une stat est un calcul mathématique basé sur les données des colonnes de PokerTracker 4. La plupart des stats mises en cache divisent la colonne de base de données comptant la fréquence d’une action par la colonne comptant les opportunités pour cette action.

Le mot "Column" est utilisé de deux façons liées. Les PokerTracker 4 Columns se trouvent dans l’onglet Columns de la fenêtre Statistics Configuration. Les Database Columns font partie de la base de données elle-même et ne sont créées que lorsqu’une stat est mise en cache.

Les bases de données sont composées de tables, et les tables sont composées de colonnes de base de données — un peu comme dans l’analogie du tableur ci-dessus. Les stats sont des "objets" PokerTracker 4 qui n’existent pas dans la base de données ; elles sont construites à partir des PokerTracker 4 Columns, ce qui permet à plusieurs stats de partager les mêmes blocs de construction sans que ces blocs soient stockés dans la base de données. Lorsque vous activez le cache pour une colonne personnalisée, le Database Cache crée une colonne de base de données correspondante.

Le Database Cache de PokerTracker 4

Prenons la stat 3Bet Preflop comme exemple. Elle divise le nombre de fois où un joueur a 3Bet (stocké dans la colonne cnt_p_3bet) par le nombre d’opportunités qu’il avait de 3Bet (stocké dans cnt_p_3bet_opp), puis multiplie par 100 pour afficher le résultat en pourcentage.

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

cnt_p_3bet et cnt_p_3bet_opp sont toutes deux mises en cache, ce qui permet à PostgreSQL de les pré-calculer afin que la stat apparaisse presque instantanément dans le HUD.

La plupart des colonnes utilisées par défaut par les stats intégrées sont mises en cache. L’exception concerne les stats qui nécessitent un post-traitement : les stats By Time telles que Real Hours (couramment utilisées dans les reports groupés par By Date) ne sont pas mises en cache.

Les stats personnalisées qui utilisent les colonnes par défaut sont généralement mises en cache. En revanche, les stats personnalisées qui reposent sur des colonnes personnalisées ne pouvaient pas être mises en cache avant PokerTracker 4.11 — la première version à permettre la mise en cache des colonnes personnalisées PokerTracker 4. À partir de la 4.11, les performances du HUD et des reports sont plus rapides pour les utilisateurs qui ajoutent leurs propres stats personnalisées ou des stats gratuites depuis le PokerTracker Download Warehouse, ainsi que pour les utilisateurs de HUD Premium tiers comme CoffeeHUD et ProPokerHUD.

Prenez la stat Delayed (Turn) CBet du Download Warehouse comme exemple :

(cnt_t_delayed_cbet / cnt_t_delayed_cbet_opp) * 100

Cette stat utilise deux colonnes personnalisées : cnt_t_delayed_cbet (la fréquence à laquelle le joueur a retardé son CBet jusqu’à la Turn) et cnt_t_delayed_cbet_opp (les opportunités qu’il avait de le faire). Aucune des deux n’existe dans le schéma de base de données par défaut, donc elles ne sont pas mises en cache dans PokerTracker 4.10.9 et versions antérieures — mais elles le sont si la stat est importée dans la 4.11 ou une version ultérieure.

Pour vérifier si une colonne est mise en cache, allez dans Configure > Statistics, choisissez Cash Games ou Tournaments, puis Players ou Hands, et sélectionnez Columns. Repérez la colonne et vérifiez que la case Cache est cochée.

PokerTracker 4 Cache

Lors de l’import d’une stat personnalisée, PokerTracker 4 active le cache pour chaque colonne pouvant être mise en cache. En revanche, les développeurs qui définissent de nouvelles colonnes doivent cocher eux-mêmes l’option Cache sur leur propre ordinateur.

Lorsqu’une Colonne Ne Peut Pas Être Mise en Cache

Toutes les colonnes ne peuvent pas être mises en cache. PokerTracker 4 examine chaque stat personnalisée importée et active automatiquement le cache lorsqu’une colonne est éligible. Si vous créez une stat personnalisée avec une colonne qui ne peut pas être mise en cache, un message d’erreur apparaît indiquant que la stat n’est pas compatible avec le cache.

Aucune notification n’est affichée à l’utilisateur lorsqu’une colonne n’est tout simplement pas éligible au cache — le message d’erreur ci-dessous est destiné aux développeurs de stats personnalisées. Les utilisateurs qui importent simplement des stats personnalisées prédéfinies s’en remettent au développeur, qui est responsable des décisions de mise en cache.

Unable to cache column

Exceptions de Cache

Les types d’expressions suivants ne peuvent pas être mis en cache.

1. Sous-requêtes. Par exemple :

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

Une sous-requête relie des colonnes provenant de différentes tables. Si elle était mise en cache, la mise à jour de cette colonne relirait la majeure partie de la base de données pour chaque joueur à la fin de chaque main — bien trop lent pour être utilisé en jeu. Même si une sous-requête ne prenait que 1 ms par joueur, une base de données de 100 joueurs ajouterait 100 ms par main pendant l’import (acceptable), mais une base de données de 10 000 joueurs ajouterait 10 secondes par main (inacceptable).

Les colonnes contenant des sous-requêtes sont toujours autorisées, mais attendez-vous à ce que toute stat qui en nécessite une ait des performances aussi mauvaises qu’avant la 4.11.

2–5. Références de tables sans cash_hand_player_statistics. Une référence à l’une des tables suivantes ne peut être mise en cache que si l’expression référence également cash_hand_player_statistics :

  • cash_hand_summary
  • cash_hand_player_combinations
  • cash_limit
  • cash_table_session_summary

PokerTracker 4 doit pouvoir décomposer les stats éligibles au cache par position absolue, en position / hors de position pour les stats post-flop, par limite, et par date. Sans référence explicite à cash_hand_player_statistics, cette table ne peut pas être jointe — et c’est cette jointure qui fournit les détails de position, de limite et de date.

Cette expression peut être mise en cache, car elle référence à la fois cash_hand_summary et cash_hand_player_statistics :

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

Cette expression ne peut pas être mise en cache, car elle référence cash_hand_summary sans la cash_hand_player_statistics nécessaire :

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

6. Références à lookup_positions. Cette table de correspondance ne peut pas être utilisée dans le cache personnalisé ; testez directement cash_hand_player_statistics.position à la place. Cela demande un peu plus de travail pour construire les positions EP et MP, mais c’est nécessaire pour que les stats fonctionnent correctement. Les autres tables de correspondance sont acceptées — en particulier lookup_actions_p, lookup_actions_f, lookup_actions_t et lookup_actions_r.

7. Stats de résultat de tournoi comme ROI et ITM, car seules les colonnes basées sur les mains peuvent être mises en cache.

8. Stats "Group By" — stats utilisées uniquement pour répartir les reports sur plusieurs lignes. Elles sont conçues pour les reports, pas pour les HUDs.