La première version de mon dépôt d'analyse boursière exécutait ses analyses sur un moteur OLTP, et la seconde exécute la même charge de travail sur une pile OLAP. J'ai choisi la pile OLAP pour une seule optimisation, mais j'ai dû comprendre l'ensemble du lakehouse pour en tirer parti.
La conception d'InnoDB offre trois garanties qui ont façonné mes premiers choix. Elle stocke toutes les colonnes d'une ligne ensemble, de sorte que la récupération d'une barre pour un symbole ne touche qu'un seul emplacement sur le disque, ce qui convient à l'ingestion. Cependant, un indicateur qui n'a besoin que de deux colonnes récupère malgré tout toutes les colonnes via le pool de tampons. Les index accélèrent les lectures mais ralentissent les écritures, car chaque écriture doit mettre à jour chaque arbre B de la table. C'est excellent pour les lectures sélectives et catastrophique pour l'ingestion à forte charge d'écriture, c'est pourquoi mes tables Raw* n'ont qu'une clé primaire.
InnoDB utilise aussi un journal d'annulation (undo log), qui permet les lectures et écritures concurrentes. Lorsqu'une ligne est mise à jour ou supprimée, l'ancienne valeur est conservée afin que d'autres sessions puissent encore la lire. Les insertions génèrent un journal d'annulation plus petit, purgé lors de la validation. Les journaux d'annulation des mises à jour et suppressions rejoignent une liste d'historique globale, qu'InnoDB purge une fois que toutes les sessions démarrées avant la validation sont terminées. Ce mécanisme est le Multi-Version Concurrency Control, ou MVCC, qui permet aux insertions et aux mises à jour de se produire sans bloquer les lectures.
Sans m'en rendre compte, j'avais conçu ma base de données InnoDB selon un principe OLAP. Ma table financialdata contenait la date et l'heure avec les prix OHLC, et chaque indicateur technique nécessitait une jointure sur celle-ci pour trouver la date. C'était l'un de mes pires choix de conception de données, et je ne m'en suis rendu compte que lorsque la base dépassait 100 Go. Le corriger a été éprouvant.
Source: Hacker News · Résumé par HeadlinesBriefing