Introduction
L'utilisation de Postgres comme système de gestion de base de données est une approche courante pour de nombreuses applications web. Cependant, lorsqu'il s'agit de stocker de grandes quantités de données JSON, les limites de Postgres peuvent être atteintes. Dans cet article, nous allons explorer comment Hatchet a résolu ce problème en utilisant des Supertoast tables.
Contexte Technique
La plateforme Hatchet repose sur une file d'attente de tâches qui contient des entrées et des sorties au format JSON. Ces données sont stockées dans des colonnes jsonb de Postgres, ce qui peut entraîner des problèmes de performances et de stockage. Les payloads de grande taille peuvent occuper jusqu'à 90% de l'espace de stockage de la base de données, ce qui n'est pas idéal du point de vue de la rentabilité et de la sauvegarde.
Les tables TOAST (The Oversized-Attribute Storage Technique) sont utilisées par Postgres pour stocker les valeurs de lignes supérieures à 2 Ko. Cependant, ces tables peuvent être coûteuses en termes de traversée pour les opérations d'autovacuum, ce qui peut entraîner des charges élevées sur la base de données.
Analyse et Implications
Pour résoudre le problème de stockage de données infrequemment accédées, Hatchet a mis en place un système de Supertoast tables. Ce système stocke les données chaudes dans des tables TOAST de Postgres, tandis que les données froides sont déchargées vers S3 avec une référence stockée dans la base de données pour assurer la cohérence.
Le système utilise une table partitionnée par partitions temporelles quotidiennes, ce qui permet de décharger les données plus anciennes vers S3 de manière efficace. Les données sont compressées et concaténées en un seul fichier, et les métadonnées sont stockées dans la base de données pour permettre une récupération efficace.
Perspective
Le système de Supertoast tables mis en place par Hatchet offre une solution efficace pour gérer les grandes quantités de données JSON dans Postgres. Cependant, il est important de surveiller les performances et les coûts de stockage pour assurer que le système reste rentable et évolutif. Les futures étapes pourraient inclure l'optimisation des opérations d'autovacuum et la mise en place de politiques de gestion des données pour assurer la cohérence et la sécurité des données.