Le moteur de stockage analytique Xuanwu offre un stockage de données de niveau entreprise, alliant fiabilité élevée, haute disponibilité (HA), hautes performances et faible coût. Il sert de fondation à AnalyticDB for MySQL pour assurer des écritures en temps réel à haut débit et des requêtes en temps réel très performantes.
Moteur de stockage analytique Xuanwu (XUANWU)
Écritures en temps réel à haut débit
AnalyticDB for MySQL atteint un débit très élevé grâce à une architecture parallèle à trois niveaux. La couche d'accès, la couche de nœuds de stockage et la couche de stockage distribué persistant montent tous en charge horizontalement en parallèle. Associée au moteur de stockage hybride ligne-colonne et à la conversion asynchrone entre les données incrémentielles et les données complètes, cette architecture permet des écritures en temps réel à haut débit et à forte concurrence.
Pour garantir une visibilité en temps réel, AnalyticDB for MySQL combine le protocole de consensus Raft avec l'application synchrone des écritures. Les données sont immédiatement interrogables après une écriture, garantissant ainsi la cohérence des écritures. Le moteur de stockage utilise la méthode « mark-for-delete » (marquage pour suppression) pour prendre en charge les mises à jour et suppressions en temps réel à haut débit, et s'appuie sur le contrôle de concurrence multiversion (MVCC) pour garantir l'atomicité et l'intégrité des données.
Stockage hybride ligne-colonne
Le moteur de stockage XUANWU prend en charge un format de stockage hybride ligne-colonne. Ce format repose sur le stockage en colonnes tout en intégrant également le stockage en lignes, à l'instar des formats ORC et Parquet dans Hadoop. La différence réside dans le fait que le stockage hybride ligne-colonne de XUANWU couvre l'élagage des colonnes analytiques et l'analyse à haut débit, tandis que son alignement par lignes offre également d'excellentes performances pour les recherches aléatoires. Cela vous procure un avantage significatif en termes de performances lors du filtrage sur des index multidimensionnels arbitraires.
La figure suivante illustre le format de stockage hybride ligne-colonne.

Indexation adaptative
Les scénarios OLAP nécessitent des requêtes sur des dimensions arbitraires, ce que les index mono-colonne ou composites des systèmes OLTP traditionnels ne permettent pas de satisfaire. XUANWU utilise une technologie d'indexation automatique adaptative au niveau des colonnes. Elle configure automatiquement les structures de données d'index pour des types de colonnes tels que les chaînes, les nombres, le texte, JSON et les vecteurs. Les index au niveau des colonnes prennent en charge la recherche sur n'importe quelle combinaison de dimensions ainsi que les fusions progressives en flux multiway, ce qui améliore considérablement les performances de filtrage des données.
Les types d'index actuels sont les index inversés, les index BKD-Tree et les index Bitmap. Les performances des index dépendent principalement des caractéristiques de distribution des données, notamment la cardinalité et le ratio entre les enregistrements renvoyés par une requête de plage et le total des enregistrements de la table. Dans certains cas, comme la condition age > 0 AND age < 100, l'utilisation d'un index est plus coûteuse qu'une analyse complète. XUANWU s'appuie donc sur l'optimiseur basé sur les coûts (CBO) pour choisir intelligemment entre l'utilisation d'un index et une analyse.
La figure suivante présente le processus de recherche par fusion multiway entre les différents types d'index.

Gestion unifiée des index structurés et non structurés
Le gestionnaire d'index de la couche de stockage XUANWU gère de manière unifiée les index structurés et non structurés. Les types gérés incluent les index BKD pour les valeurs numériques, les index inversés pour les chaînes, les index JSON et les index vectoriels pour les données non structurées, ainsi que les index en texte intégral pour les données textuelles. Le gestionnaire d'index fournit une expression unifiée à la couche de calcul, de sorte que la logique SQL de cette dernière soit compatible avec les types de données hétérogènes et accélérée par les index. Par conséquent, AnalyticDB for MySQL prend en charge l'analyse de corrélation entre les données en texte intégral et les tables structurées, et permet d'exprimer une logique complexe en SQL. L'exemple suivant illustre une telle requête.

SELECT A.customer_id,
B.score
FROM (
SELECT customer_id
FROM dw_databank_crowds_all_100
WHERE MATCH (item_title, item_desc) AGAINST ('red dress') > 0.5
AND buy_cnt between 1 and 3
AND style_prefer_tags in ('slim fit','soft fabric','medium thickness')
AND ds = 201704
) A
JOIN (
SELECT buyer_id,
MAX(MATCH (comments) AGAINST ('excellent workmanship,very good quality,elegant,looks great when worn,looks classy -low price')) AS score
FROM dw_databank_profile_info_0
WHERE MATCH (mail_addr) AGAINST ('Hangzhou,Zhejiang')
AND MATCH (comments) AGAINST ('good workmanship,very good quality,elegant,looks great when worn,looks classy -low price')
AND create_time < '2018-04-31 12:00:00'
AND create_time > '2017-04-31 12:00:00'
GROUP BY buyer_id
ORDER BY score DESC
LIMIT 100000
) B
ON A.customer_id = B.buyer_id
ORDER BY B.score DESC
LIMIT 10000
La requête effectue une analyse de corrélation sur les ensembles de résultats d'index en texte intégral renvoyés par les sous-requêtes, trie les résultats analysés par score dans l'ordre décroissant et renvoie les 10 000 premières lignes.
Moteur de stockage analytique Xuanwu V2 (XUANWU_V2)
AnalyticDB for MySQL a fait évoluer le moteur de stockage analytique Xuanwu original pour développer XUANWU_V2, un moteur de stockage de nouvelle génération.
Organisation efficace des données
XUANWU_V2 optimise l'organisation des données. Les données sont écrites dans le moteur en temps réel en mode ajout séquentiel (append). Une tâche Flush écrit ensuite les données dans le moteur de données complètes optimisé pour la lecture. Des tâches de compaction fusionnent ensuite les données au sein d'un niveau ou entre les niveaux du moteur de données complètes. Cela maintient les partitions situées en dessous du niveau L0 triées et organise physiquement les données en tailles fixes.
La figure suivante montre comment les données sont organisées.
Cette organisation des données garantit que le moteur en temps réel est intégré rapidement au moteur de données complètes optimisé pour la lecture, ce qui améliore les performances des requêtes. Elle réduit également considérablement l'amplification en lecture lors de la compaction et diminue davantage la consommation de CPU et d'E/S pendant ce processus. De plus, XUANWU_V2 divise et fusionne de manière adaptative les fichiers de partition trop volumineux ou trop petits, vous dispensant ainsi de vous soucier du choix d'une clé de partition.
Format de stockage efficace
XUANWU_V2 s'appuie sur les blocs d'E/S au niveau des colonnes organisés par un nombre fixe de lignes, et introduit un format de fichier qui organise les blocs d'E/S par taille fixe. Cette organisation par taille fixe optimise la gestion des E/S et de la mémoire, et résout les problèmes causés par les incohérences entre l'alignement des lignes et la taille des E/S. Elle améliore également l'efficacité de la réutilisation de la mémoire et réduit la surcharge liée à l'allocation et à la libération de la mémoire. En alignant la mémoire sur les opérations d'E/S, XUANWU_V2 réduit encore l'amplification en lecture et abaisse les coûts d'E/S.
Meilleure élasticité de mise à l'échelle horizontale
XUANWU_V2 stocke toutes les données dans OSS, ce qui réduit considérablement vos coûts de stockage et améliore grandement l'efficacité de la mise à l'échelle horizontale et de la migration des nœuds. XUANWU_V2 utilise des disques ESSD (Enterprise SSD) comme cache de requête et prend en charge deux formes : le préchargement de partitions spécifié par une instruction DDL et la mise en cache automatique des requêtes. Cela améliore efficacement les performances des requêtes.