🚀 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
  • Milvus prend en charge les importations de fichiers Apache Parquet pour une meilleure efficacité du traitement des données

Milvus prend en charge les importations de fichiers Apache Parquet pour une meilleure efficacité du traitement des données

  • Engineering
March 08, 2024
Cai Zhang, Fendy Feng

Milvus, la base de données vectorielles hautement évolutive réputée pour sa capacité à gérer de vastes ensembles de données, fait un grand pas en avant en introduisant la prise en charge des fichiers Parquet dans la version 2.3.4. En adoptant Apache Parquet, les utilisateurs peuvent rationaliser leurs processus d'importation de données et bénéficier d'économies substantielles en termes de coûts de stockage et de calcul.

Dans notre dernier article, nous explorons les avantages de Parquet et les bénéfices qu'il apporte aux utilisateurs de Milvus. Nous expliquons les raisons de l'intégration de cette fonctionnalité et fournissons un guide étape par étape sur l'importation transparente de fichiers Parquet dans Milvus, ce qui ouvre de nouvelles possibilités pour une gestion et une analyse efficaces des données.

Qu'est-ce que Apache Parquet ?

Apache Parquet est un format de fichier de données orienté colonnes, populaire et open-source, conçu pour améliorer l'efficacité du stockage et du traitement des ensembles de données à grande échelle. Contrairement aux formats de données traditionnels orientés ligne tels que CSV ou JSON, Parquet stocke les données par colonne, offrant ainsi des schémas de compression et d'encodage des données plus efficaces. Cette approche se traduit par une amélioration des performances, une réduction des besoins en stockage et une augmentation de la puissance de traitement, ce qui en fait un outil idéal pour traiter des données complexes en masse.

Comment les utilisateurs de Milvus bénéficient de la prise en charge des importations de fichiers Parquet

Milvus étend la prise en charge des importations de fichiers Parquet, offrant aux utilisateurs des expériences optimisées et divers avantages, notamment la réduction des dépenses de stockage et de calcul, la rationalisation de la gestion des données et un processus d'importation simplifié.

Efficacité de stockage optimisée et gestion des données rationalisée

Parquet offre des options de compression flexibles et des schémas d'encodage efficaces adaptés aux différents types de données, garantissant ainsi une efficacité de stockage optimale. Cette flexibilité est particulièrement précieuse dans les environnements en nuage où chaque once d'économie de stockage est directement corrélée à des réductions de coûts tangibles. Grâce à cette nouvelle fonctionnalité de Milvus, les utilisateurs peuvent consolider sans effort toutes leurs données diverses dans un fichier unique, ce qui rationalise la gestion des données et améliore l'expérience globale de l'utilisateur. Cette fonctionnalité est particulièrement avantageuse pour les utilisateurs travaillant avec des types de données Array de longueur variable, qui peuvent désormais bénéficier d'un processus d'importation de données simplifié.

Amélioration des performances des requêtes

La conception du stockage en colonnes de Parquet et les méthodes de compression avancées améliorent considérablement les performances des requêtes. Lorsqu'ils effectuent des requêtes, les utilisateurs peuvent se concentrer uniquement sur les données pertinentes sans parcourir les données non pertinentes. Cette lecture sélective des colonnes minimise l'utilisation de l'unité centrale, ce qui se traduit par des temps de requête plus rapides.

Compatibilité linguistique étendue

Parquet est disponible dans de nombreux langages tels que Java, C++ et Python et est compatible avec un grand nombre d'outils de traitement de données. Grâce à la prise en charge des fichiers Parquet, les utilisateurs de Milvus qui utilisent différents SDK peuvent générer de manière transparente des fichiers Parquet à analyser dans la base de données.

Comment importer des fichiers Parquet dans Milvus ?

Si vos données sont déjà au format Parquet, l'importation est facile. Téléchargez le fichier Parquet vers un système de stockage d'objets tel que MinIO, et vous êtes prêt à l'importer.

L'extrait de code ci-dessous est un exemple d'importation de fichiers Parquet dans Milvus.

remote_files = []
try:
    print("Prepare upload files")
    minio_client = Minio(endpoint=MINIO_ADDRESS, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY,
                         secure=False)
    found = minio_client.bucket_exists(bucket_name)
    if not found:
        minio_client.make_bucket(bucket_name)
        print("MinIO bucket '{}' doesn't exist".format(bucket_name))
        return False, []

    # set your remote data path
    remote_data_path = "milvus_bulkinsert"

    def upload_file(f: str):
        file_name = os.path.basename(f)
        minio_file_path = os.path.join(remote_data_path, "parquet", file_name)
        minio_client.fput_object(bucket_name, minio_file_path, f)
        print("Upload file '{}' to '{}'".format(f, minio_file_path))
        remote_files.append(minio_file_path)

    upload_file(data_file)

except S3Error as e:
    print("Failed to connect MinIO server {}, error: {}".format(MINIO_ADDRESS, e))
    return False, []

print("Successfully upload files: {}".format(remote_files))
return True, remote_files

Si vos données ne sont pas des fichiers Parquet ou si elles comportent des champs dynamiques, vous pouvez utiliser BulkWriter, notre outil de conversion de format de données, pour vous aider à générer des fichiers Parquet. BulkWriter a désormais adopté Parquet comme format de données de sortie par défaut, ce qui garantit une expérience plus intuitive pour les développeurs.

L'extrait de code ci-dessous est un exemple d'utilisation de BulkWriter pour générer des fichiers Parquet.

import numpy as np
import json

from pymilvus import (
    RemoteBulkWriter,
    BulkFileType,
)

remote_writer = RemoteBulkWriter(
        schema=your_collection_schema,
        remote_path="your_remote_data_path",
        connect_param=RemoteBulkWriter.ConnectParam(
            endpoint=YOUR_MINIO_ADDRESS,
            access_key=YOUR_MINIO_ACCESS_KEY,
            secret_key=YOUR_MINIO_SECRET_KEY,
            bucket_name="a-bucket",
        ),
        file_type=BulkFileType.PARQUET,
)

# append your data
batch_count = 10000
for i in range(batch_count):
    row = {
        "id": i,
        "bool": True if i % 5 == 0 else False,
        "int8": i % 128,
        "int16": i % 1000,
        "int32": i % 100000,
        "int64": i,
        "float": i / 3,
        "double": i / 7,
        "varchar": f"varchar_{i}",
        "json": {"dummy": i, "ok": f"name_{i}"},
        "vector": gen_binary_vector() if bin_vec else gen_float_vector(),
        f"dynamic_{i}": i,
    }
    remote_writer.append_row(row)

# append rows by numpy type
for i in range(batch_count):
    remote_writer.append_row({
        "id": np.int64(i + batch_count),
        "bool": True if i % 3 == 0 else False,
        "int8": np.int8(i % 128),
        "int16": np.int16(i % 1000),
        "int32": np.int32(i % 100000),
        "int64": np.int64(i),
        "float": np.float32(i / 3),
        "double": np.float64(i / 7),
        "varchar": f"varchar_{i}",
        "json": json.dumps({"dummy": i, "ok": f"name_{i}"}),
        "vector": gen_binary_vector() if bin_vec else gen_float_vector(),
        f"dynamic_{i}": i,
    })

print(f"{remote_writer.total_row_count} rows appends")
print(f"{remote_writer.buffer_row_count} rows in buffer not flushed")
print("Generate data files...")
remote_writer.commit()
print(f"Data files have been uploaded: {remote_writer.batch_files}")
remote_files = remote_writer.batch_files

Vous pouvez ensuite commencer à importer vos fichiers Parquet dans Milvus.

remote_files = [remote_file_path]
task_id = utility.do_bulk_insert(collection_name=collection_name,
                                 files=remote_files)

task_ids = [task_id]         
states = wait_tasks_to_state(task_ids, BulkInsertState.ImportCompleted)
complete_count = 0
for state in states:
    if state.state == BulkInsertState.ImportCompleted:
        complete_count = complete_count + 1

Vos données sont désormais intégrées de manière transparente dans Milvus.

Quelles sont les prochaines étapes ?

Alors que Milvus continue à prendre en charge des volumes de données toujours plus importants, le défi consiste à gérer des importations considérables, en particulier lorsque les fichiers Parquet dépassent 10 Go. Pour relever ce défi, nous prévoyons de séparer les données d'importation en colonnes scalaires et vectorielles, en créant deux fichiers Parquet par importation afin d'alléger la pression des entrées/sorties. Pour les ensembles de données dépassant plusieurs centaines de gigaoctets, nous recommandons d'importer les données plusieurs fois.

Like the article? Spread the word

Continuer à Lire