🚀 Essayez Zilliz Cloud, la version entièrement gérée de Milvus, gratuitement—découvrez des performances 10x plus rapides ! Essayez maintenant>>

milvus-logo
LFAI
  • Home
  • Blog
  • Comment compacter les données dans Milvus ?

Comment compacter les données dans Milvus ?

  • Engineering
February 21, 2022
Bingyi Sun

Binlog Cover Image Image de couverture Binlog

Par Bingyi Sun et Angela Ni.

Avec la sortie officielle de Milvus 2.0 GA, une liste de nouvelles fonctionnalités est prise en charge. Parmi celles-ci, le compactage est l'une des nouvelles fonctionnalités qui peut vous aider à économiser de l'espace de stockage.

Le compactage fait référence au processus de fusion de petits segments en grands segments et au nettoyage des données supprimées logiquement. En d'autres termes, le compactage réduit l'utilisation de l'espace disque en purgeant les entités supprimées ou expirées dans les binlogs. Il s'agit d'une tâche d'arrière-plan déclenchée par la coordination des données et exécutée par le nœud de données dans Milvus.

Cet article dissèque le concept et la mise en œuvre du compactage dans Milvus.

Qu'est-ce que le compactage ?

Avant d'entrer dans les détails de la mise en œuvre du compactage dans Milvus 2.0, il est essentiel de comprendre ce qu'est le compactage dans Milvus.

En tant qu'utilisateur de Milvus, vous avez souvent été gêné par l'utilisation croissante de l'espace disque. Un autre problème est qu'un segment de moins de 1 024 lignes n'est pas indexé et ne prend en charge que la recherche par force brute pour traiter les requêtes. Les petits segments causés par la vidange automatique ou la vidange provoquée par l'utilisateur peuvent nuire à l'efficacité des requêtes.

Par conséquent, pour résoudre les deux problèmes mentionnés ci-dessus, réduire l'utilisation du disque et améliorer l'efficacité des requêtes, Milvus prend en charge le compactage.

Les bases de données telles que LevelDB et RocksDB ajoutent des données aux tables de chaînes triées (SSTables). La moyenne des lectures de disque par requête augmente avec le nombre de tables SST, ce qui entraîne des requêtes inefficaces. Pour réduire l'amplification des lectures et libérer de l'espace sur le disque dur, ces bases de données compactent les tables SST en une seule. Les processus de compactage s'exécutent automatiquement en arrière-plan.

De même, Milvus ajoute les données insérées et supprimées aux binlogs. Plus le nombre de journaux augmente, plus l'espace disque est utilisé. Pour libérer de l'espace sur le disque dur, Milvus compacte les binlogs des données supprimées et insérées. Si une entité est insérée puis supprimée, elle n'existe plus dans les binlogs qui enregistrent l'insertion ou la suppression des données une fois qu'ils ont été compactés. En outre, Milvus compacte également les segments - fichiers de données créés automatiquement par Milvus pour contenir les données insérées.

Comment configurer le compactage ?

La configuration du compactage dans Milvus implique principalement deux paramètres : dataCoord.enableCompaction et common.retentionDuration.

dataCoord.enableCompaction spécifie si le compactage doit être activé. Sa valeur par défaut est true.

common.retentionDuration spécifie une période pendant laquelle le compactage ne s'exécute pas. Son unité est la seconde. Lorsque vous compactez des données, toutes les entités supprimées seront rendues indisponibles pour la recherche avec Time Travel. Par conséquent, si vous envisagez d'effectuer des recherches avec Time Travel, vous devez spécifier une période pendant laquelle le compactage ne s'exécute pas et n'affecte pas les données supprimées. Pour garantir des résultats précis des recherches avec Time Travel, Milvus conserve les données exploitées au cours d'une période spécifiée par common.retentionDuration. En d'autres termes, les données exploitées au cours de cette période ne seront pas compactées. Pour plus de détails, voir Recherche avec voyage dans le temps.

Le compactage est activé par défaut dans Milvus. Si vous avez désactivé le compactage mais que vous souhaitez l'activer manuellement par la suite, vous pouvez suivre les étapes ci-dessous :

  1. Appelez la méthode collection.compact() pour déclencher manuellement un processus de compactage global. Notez toutefois que cette opération peut prendre beaucoup de temps.
  2. Après avoir appelé la méthode, un ID de compactage est renvoyé. Vous pouvez consulter l'état du compactage en appelant la méthode collection.get_compaction_state().

Une fois le compactage activé, il s'exécute automatiquement en arrière-plan. Étant donné que le processus de compactage peut prendre beaucoup de temps, les demandes de compactage sont traitées de manière asynchrone pour gagner du temps.

Comment mettre en œuvre le compactage ?

Dans Milvus, vous pouvez mettre en œuvre le compactage manuellement ou automatiquement.

Le compactage manuel de binlogs ou de segments ne nécessite pas de satisfaire à des conditions de déclenchement. Par conséquent, si vous invoquez manuellement le compactage, les binlogs ou les segments seront compactés quoi qu'il arrive.

Toutefois, si vous souhaitez activer le compactage automatique, certaines conditions de déclenchement du compactage doivent être remplies pour que le système compacte vos segments ou vos binlogs.

En général, deux types d'objets peuvent être compactés dans Milvus : les journaux et les segments.

Compactage des binglogs

Un binlog est un journal binaire, ou une unité plus petite dans un segment, qui enregistre et gère les mises à jour et les modifications apportées aux données dans la base de données vectorielles Milvus. Les données d'un segment sont conservées dans plusieurs binlogs. Le compactage des binlogs implique deux types de binlogs dans Milvus : les binlogs d'insertion et les binlogs delta.

Les binlogs delta sont générés lorsque des données sont supprimées, tandis que les binlogs d'insertion sont générés dans les trois circonstances suivantes.

  • Lorsque des données insérées sont ajoutées, le segment atteint la limite supérieure de taille et est automatiquement évacué sur le disque.
  • DataCoord vide automatiquement les segments qui restent non scellés pendant une longue période.
  • Certaines API comme collection.num_entities, collection.load(), et d'autres encore, invoquent automatiquement le rinçage pour écrire des segments sur le disque.

Par conséquent, le compactage des journaux, comme son nom l'indique, fait référence au compactage des journaux à l'intérieur d'un segment. Plus précisément, lors du compactage de binlogs, tous les binlogs delta et les binlogs d'insertion qui ne sont pas conservés sont compactés.

Binlog compaction Compactage des binlogs

Lorsqu'un segment est transféré sur le disque ou lorsque Milvus demande un compactage global parce que le compactage n'a pas été exécuté depuis longtemps, au moins l'une des deux conditions suivantes doit être remplie pour déclencher le compactage automatique :

  1. Les lignes dans les delta binlogs représentent plus de 20 % du nombre total de lignes.
  2. La taille des delta binlogs dépasse 10 Mo.

Compactage de segments

Un segment est un fichier de données créé automatiquement par Milvus pour contenir les données insérées. Il existe deux types de segments dans Milvus : le segment croissant et le segment scellé.

Un segment croissant continue à recevoir les données nouvellement insérées jusqu'à ce qu'il soit scellé. Un segment scellé ne reçoit plus de nouvelles données et sera évacué vers le stockage d'objets, laissant les nouvelles données à insérer dans un segment croissant nouvellement créé.

Par conséquent, le compactage de segments fait référence au compactage de plusieurs segments scellés. Plus précisément, lors du compactage de segments, les petits segments sont compactés en segments plus grands.

Segment compaction Compactage de segments

Chaque segment généré après le compactage ne peut pas dépasser la limite supérieure de la taille d'un segment, qui est de 512 Mo par défaut. Consultez les configurations du système pour savoir comment modifier la limite supérieure de la taille d'un segment.

Lorsqu'un segment se vide sur le disque, ou lorsque Milvus demande un compactage global parce que le compactage n'a pas été exécuté depuis longtemps, la condition suivante doit être remplie pour déclencher le compactage automatique :

  • Segments inférieurs à 0,5 * MaxSegmentSize est supérieur à 10.

Que faire ensuite ?

Que faire après avoir appris les bases du compactage dans Milvus ? Actuellement, tous les paramètres de configuration du compactage ne figurent pas dans le fichier milvus.yaml et les stratégies de génération de plans sont relativement basiques. Si vous êtes intéressé, venez contribuer à Milvus, le projet open-source!

Par ailleurs, dans la série de blogs sur les nouvelles fonctionnalités de la version 2.0, nous nous efforçons d'expliquer la conception des nouvelles fonctionnalités. En savoir plus sur cette série de blogs !

A propos de l'auteur

Bingyi Sun, ingénieur logiciel principal du projet Milvus, a obtenu sa maîtrise en ingénierie logicielle à l'université Jiao Tong de Shanghai. Il est principalement responsable du développement des composants liés au stockage dans Milvus 2.0. Son domaine d'intérêt est la base de données et les systèmes distribués. C'est un grand fan de projets open source et un gourmet qui aime jouer aux jeux vidéo et lire pendant son temps libre.

Like the article? Spread the word

Continuer à Lire