Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/07197.jsonl.gz/1323

Dans un short article précédent, j’ai décrit un système de partitionnement pour adapter le débit et les performances des costs de travail de requête et d’ingestion. Dans cet write-up, je présenterai une autre technique courante, le partitionnement, qui offre d’autres avantages en termes de performances et de gestion pour une base de données de partitionnement. Je décrirai également comment gérer efficacement les partitions pour les charges de travail de requête et d’ingestion, et comment gérer les partitions froides (anciennes) où les exigences de lecture sont assez différentes des partitions chaudes (récentes).
Sharding vs partitionnement
Le partitionnement est un moyen de fractionner les données dans un système de base de données distribué. Les données de chaque partition n’ont pas à partager des ressources telles que le processeur ou la mémoire, et peuvent être lues ou écrites en parallèle.
La figure 1 est un exemple de foundation de données de partitionnement. Les données sur les ventes de 50 États d’un pays sont divisées en quatre partitions, chacune contenant les données de 12 ou 13 États. En attribuant un nœud de requête à chaque partition, une tâche qui lit les 50 états peut être répartie entre ces quatre nœuds exécutés en parallèle et sera exécutée quatre fois additionally rapidement par rapport à la configuration qui lit les 50 états par un nœud. Vous trouverez in addition d’informations sur les fragments et leurs effets de mise à l’échelle sur les rates de travail d’ingestion et de requête dans mon report précédent.
Le partitionnement est un moyen de diviser les données de chaque partition en partitions sans chevauchement pour une gestion parallèle ultérieure. Cela réduit la lecture de données inutiles et permet de mettre en œuvre efficacement des politiques de conservation des données.
Dans la figure 2, les données de chaque partition sont partitionnées par jour de vente. Si nous devons créer un rapport sur les ventes d’un jour spécifique, comme le 1er mai 2022, les nœuds de requête n’ont besoin que de lire les données de leurs partitions correspondantes du 2022.05.01.
Le reste de cet write-up se concentrera sur les effets du partitionnement. Nous verrons comment gérer efficacement les partitions pour les prices de travail de requête et d’ingestion sur les données chaudes et froides.
Effets de partitionnement
Les trois avantages les in addition courants du partitionnement des données sont l’élagage des données, le parallélisme intra-nœud et la suppression rapide.
Élagage des données
Un système de base de données peut contenir plusieurs années de données, mais la plupart des requêtes ne doivent lire que des données récentes (par exemple, “Combien de commandes ont été passées au cours des trois derniers jours ?”). Le partitionnement des données en partitions sans chevauchement, comme illustré à la figure 2, permet d’ignorer facilement des partitions hors limites entières et de lire et de traiter uniquement des ensembles de données pertinents et très petits pour renvoyer rapidement des résultats.
Parallélisme intra-nœud
Le traitement multithread et les données de streaming sont essentiels dans un système de base de données pour utiliser pleinement le processeur et la mémoire disponibles et obtenir les meilleures performances possibles. Le partitionnement des données en petites partitions facilite la mise en œuvre d’un moteur multithread qui exécute un thread par partition. Pour chaque partition, davantage de threads peuvent être générés pour gérer les données au sein de cette partition. Connaître les statistiques de partition telles que la taille et le nombre de lignes aidera à allouer la quantité optimale de CPU et de mémoire pour des partitions spécifiques.
Suppression rapide des données
De nombreuses organisations ne conservent que les données récentes (par exemple, les données des trois derniers mois) et souhaitent supprimer les anciennes données dès que attainable. En partitionnant les données sur des fenêtres temporelles sans chevauchement, la suppression d’anciennes partitions devient aussi uncomplicated que la suppression de fichiers, sans qu’il soit nécessaire de réorganiser les données et d’interrompre d’autres activités de requête ou d’ingestion. Si toutes les données doivent être conservées, une part furthermore loin dans cet post décrira comment gérer différemment les données récentes et anciennes pour garantir que les systèmes offrent d’excellentes performances dans tous les cas.
Stockage et gestion des partitions
Optimisation pour les costs de travail de requête
Une partition contient déjà un petit ensemble de données, nous ne voulons donc pas stocker une partition dans de nombreux fichiers in addition petits (ou des morceaux dans le cas d’une base de données en mémoire). Une partition doit être composée d’un seul ou de quelques fichiers.
La réduction du nombre de fichiers dans une partition présente deux avantages importants. Il réduit à la fois les opérations d’E/S lors de la lecture des données pour l’exécution d’une requête et améliore l’encodage/la compression des données. L’amélioration de l’encodage réduit à son tour les coûts de stockage et, in addition essential encore, améliore la vitesse d’exécution des requêtes en lisant moins de données.
Optimisation pour les fees de travail d’ingestion
Ingestion naïve. Pour conserver les données d’une partition dans un fichier pour les avantages d’optimisation de lecture notés ci-dessus, chaque fois qu’un ensemble de données est ingéré, il doit être analysé et divisé dans les bonnes partitions, puis fusionné dans le fichier existant de sa partition correspondante, comme illustré à la figure 3.
Le processus de fusion de nouvelles données avec des données existantes prend souvent du temps en raison des E/S coûteuses et du coût de mélange et d’encodage des données de la partition. Cela entraînera une longue latence pour les réponses au customer indiquant que les données ont été ingérées avec succès, et pour les requêtes des données nouvellement ingérées, auto elles ne seront pas immédiatement disponibles dans le stockage.
Ingestion à faible latence. Pour réduire la latence de chaque ingestion, nous pouvons diviser le processus en deux étapes : l’ingestion et le compactage.
Ingestion
Au cours de l’étape d’ingestion, les données ingérées sont fractionnées et écrites dans leur propre fichier, comme illustré à la determine 4. Elles ne sont pas fusionnées avec les données existantes de la partition. Dès que les données ingérées sont durables avec succès, le shopper d’ingestion recevra un signal de réussite et le fichier nouvellement ingéré sera disponible pour l’interrogation.
Si le taux d’ingestion est élevé, de nombreux petits fichiers s’accumuleront dans la partition, comme illustré à la determine 5. À ce stade, une requête nécessitant des données d’une partition doit lire tous les fichiers de cette partition. Ce n’est bien sûr pas idéal pour les performances des requêtes. L’étape de compactage, décrite ci-dessous, réduit au minimum amount cette accumulation de fichiers.
Compactage
Le compactage est le processus de fusion des fichiers d’une partition en un ou plusieurs fichiers pour de meilleures performances de requête et de compression. Par exemple, la figure 6 montre tous les fichiers de la partition 2022.05.01 fusionnés en un seul fichier, et tous les fichiers de la partition 2022.05.02 fusionnés en deux fichiers, chacun inférieur à 100 Mo.
Les décisions concernant la fréquence de compactage et la taille maximale des fichiers compactés seront différentes pour différents systèmes, mais l’objectif commun est de maintenir les performances des requêtes à un niveau élevé en réduisant les E/S (c’est-à-dire le nombre de fichiers) et en ayant des fichiers volumineux assez pour compresser efficacement.
Partitions chaudes ou froides
Les partitions fréquemment interrogées sont considérées comme des partitions chaudes, tandis que celles qui sont rarement lues sont appelées des partitions froides. Dans les bases de données, les partitions actives sont généralement les partitions contenant des données récentes telles que les dates de vente récentes. Les partitions froides contiennent souvent des données plus anciennes, qui sont moins susceptibles d’être lues.
De as well as, lorsque les données vieillissent, elles sont généralement interrogées en gros morceaux, par exemple par mois ou même par année. Voici quelques exemples pour catégoriser sans ambiguïté les données du chaud au froid :
- Chaud : données de la semaine en cours.
- Moins chaud : données des semaines précédentes mais du mois en cours.
- Froid : Données des mois précédents mais de l’année en cours.
- Furthermore froid : données de l’année dernière et antérieures.
Pour réduire l’ambiguïté entre les données chaudes et froides, nous devons trouver des réponses à deux concerns. Premièrement, nous devons quantifier le chaud, le moins chaud, le froid, le in addition froid et peut-être même de in addition en plus froid. Deuxièmement, nous devons réfléchir à la manière dont nous pouvons réduire le nombre d’E/S dans le cas de la lecture de données froides. Nous ne voulons pas lire 365 fichiers, chacun représentant une partition de données d’une journée, juste pour obtenir le chiffre d’affaires de l’année dernière.
Partitionnement hiérarchique
Le partitionnement hiérarchique, illustré à la figure 7, apporte des réponses aux deux thoughts ci-dessus. Les données de chaque jour de la semaine en cours sont stockées dans sa propre partition. Les données des semaines précédentes du mois en cours sont partitionnées par semaine. Les données des mois précédents de l’année en cours sont réparties par mois. Les données encore moreover anciennes sont partitionnées par année.
Ce modèle peut être assoupli en définissant une partition active à la spot de la partition de day actuelle. Toutes les données arrivant après la partition active seront partitionnées par day, tandis que les données avant la partition active seront partitionnées par semaine, mois et année. Cela permet au système de conserver autant de petites partitions récentes que nécessaire. Même si tous les exemples de ce article partitionnent les données par temps, le partitionnement non temporel fonctionnera de la même manière tant que vous pouvez définir des expressions pour une partition et leur hiérarchie.
Le partitionnement hiérarchique réduit le nombre de partitions dans le système, ce qui facilite sa gestion et réduit le nombre de partitions à lire lors de l’interrogation de blocs furthermore grands et additionally anciens.
Le processus de requête pour le partitionnement hiérarchique est le même que pour le partitionnement non hiérarchique, motor vehicle il appliquera la même stratégie d’élagage pour lire uniquement les partitions pertinentes. Les processus d’ingestion et de compactage seront un peu plus compliqués, car or truck il sera in addition difficile d’organiser les partitions dans leur hiérarchie définie.
Partitionnement agrégé
De nombreuses organisations ne souhaitent pas conserver les anciennes données, mais préfèrent plutôt conserver des agrégations telles que le nombre de commandes et les ventes totales de chaque produit chaque mois. Cela peut être pris en demand en agrégeant les données et en les partitionnant par mois. Cependant, étant donné que les partitions agrégées stockent des données agrégées, leur schéma sera différent des partitions non agrégées, ce qui entraînera un travail supplémentaire pour l’ingestion et l’interrogation. Il existe différentes façons de gérer ces données froides et agrégées, mais ce sont de grands sujets adaptés à un futur post.
Nga Tran est ingénieur logiciel chez InfluxDataet membre du InfluxDB IOx équipe, qui construit le moteur de stockage de séries chronologiques de nouvelle génération pour InfluxDB. Avant InfluxData, Nga travaillait pour Vertica Analytic DBMS depuis moreover d’une décennie. Elle était l’un des ingénieurs clés qui ont construit l’optimiseur de requêtes pour Vertica, et plus tard, a dirigé l’équipe d’ingénierie de Vertica.
—
Le New Tech Discussion board offre un lieu pour explorer et discuter des systems d’entreprise émergentes avec une profondeur et une ampleur sans précédent. La sélection est subjective, basée sur notre sélection des technologies que nous pensons importantes et les additionally intéressantes pour les lecteurs d’InfoWorld. InfoWorld n’accepte pas les supports promoting pour publication et se réserve le droit de modifier tout le contenu contribué. Envoyez toutes les demandes à [email protected]
Copyright © 2022 IDG Communications, Inc.