Maison >développement back-end >Golang >Implémentation de Golang de stockage d'objets

Implémentation de Golang de stockage d'objets

WBOY
WBOYoriginal
2023-05-13 09:11:36669parcourir

Alors que la quantité de données continue de croître, les méthodes traditionnelles de stockage de fichiers deviennent de plus en plus difficiles à répondre à la demande. En tant que nouvelle méthode de stockage, le stockage objet présente les avantages d'une évolutivité élevée, d'une fiabilité élevée et d'une concurrence élevée, et est devenu l'une des formes de stockage actuellement les plus populaires. Cet article explique comment implémenter le stockage d'objets dans Golang.

1. Comprendre le stockage d'objets

Le stockage d'objets est une méthode de stockage basée sur le stockage dans le cloud qui stocke les données sous forme d'objets, et chaque objet contient un identifiant unique, des caractères et des données. et les métadonnées. Contrairement aux méthodes traditionnelles de stockage de fichiers, le stockage objet peut atteindre une expansion infinie et peut utiliser plusieurs nœuds pour la sauvegarde afin de garantir une fiabilité élevée des données. Le stockage d'objets est généralement utilisé dans des scénarios tels que le stockage de données à grande échelle et la gestion massive de fichiers.

2. Conception de l'architecture

La première tâche pour mettre en œuvre le stockage d'objets consiste à concevoir l'architecture du système, y compris le stockage des données, le stockage des métadonnées, la sauvegarde des données, etc. Ce qui suit est une architecture de stockage d'objets simple :

Implémentation de Golang de stockage dobjets

Dans l'image ci-dessus, l'objet téléchargé sera stocké sur le nœud de données et enregistré dans les métadonnées. le nœud, il est utilisé pour l’indexation et la récupération d’objets. Les nœuds de stockage seront sauvegardés régulièrement pour garantir la fiabilité des données.

3. Implémentation du code

3.1 Installer les dépendances

Avant de développer le stockage d'objets Golang, vous devez installer les bibliothèques de dépendances suivantes :

go get github.com/minio/minio-go
go get github.com/joho/godotenv
# 🎜🎜#
    minio-go : Une bibliothèque client open source Golang S3.
  • godotenv : utilisé pour lire les variables d'environnement.
3.2 Configuration d'initialisation

Utilisez godotenv dans le code pour lire les variables d'environnement, y compris la clé d'accès, la clé secrète, le compartiment et d'autres informations stockées.

err := godotenv.Load()
if err != nil {
  log.Fatal("Error loading .env file")
}

accessKey := os.Getenv("ACCESS_KEY")
secretKey := os.Getenv("SECRET_KEY")
endpoint := os.Getenv("END_POINT")
bucket := os.Getenv("BUCKET_NAME")
location := os.Getenv("LOCATION")

3.3 Connectez-vous au service de stockage d'objets

Utilisez minio-go pour vous connecter au service de stockage d'objets Le code spécifique est le suivant :

minioClient, err := minio.New(endpoint, accessKey, secretKey, false)

if err != nil {
  log.Fatalln(err)
}

if err = minioClient.MakeBucket(bucket, location); err != nil {
  exists, errBucketExists := minioClient.BucketExists(bucket)

  if errBucketExists == nil && exists {
    log.Printf("We already own %s
", bucket)
  } else {
    log.Fatalln(err)
  }
} else {
  log.Printf("Successfully created %s
", bucket)
}

log.Printf("Successfully connected to %s
", endpoint)
#🎜. 🎜#Dans le code ci-dessus, utilisez La fonction MakeBucket crée un bucket (bucket) et ignore la création si le bucket existe déjà. Si la connexion réussit, le journal « Connexion réussie à xxx » sera affiché.

3.4 Télécharger l'objet

Après vous être connecté avec succès au service de stockage d'objets, vous pouvez utiliser le code suivant pour télécharger l'objet :

filePath := "/path/to/file.jpg"
objectName := "file.jpg"

contentType := "application/octet-stream"

// Open the file for use
file, err := os.Open(filePath)
if err != nil {
  log.Fatalln(err)
}
defer file.Close()

// Get file size and read the file content into a buffer
fileInfo, _ := file.Stat()
var size int64 = fileInfo.Size()
buffer := make([]byte, size)
file.Read(buffer)

// Upload the file to S3 with FPutObject
n, err := minioClient.PutObject(bucket, objectName, bytes.NewReader(buffer), size, minio.PutObjectOptions{ContentType: contentType})
if err != nil {
  log.Fatalln(err)
}

log.Printf("Successfully uploaded %s with size %d
", objectName, n)

Lors du téléchargement l'objet, vous devez fournir des informations telles que le nom de l'objet, le chemin relatif de l'objet et son type de contenu. Utilisez la fonction PutObject dans le code pour télécharger l'objet. Une fois le téléchargement réussi, les informations du journal « Téléchargement réussi xxx » sont affichées.

3.5 Télécharger l'objet

Utilisez le code suivant pour télécharger des fichiers depuis le stockage d'objets et les enregistrer localement :

filePath := "/path/to/file.jpg"
objectName := "file.jpg"

err = minioClient.FGetObject(bucket, objectName, filePath, minio.GetObjectOptions{})
if err != nil {
  log.Fatalln(err)
}

log.Printf("Successfully downloaded %s from %s
", objectName, bucket)

Parmi eux, la fonction FGetObject est utilisé Téléchargez le fichier à partir du service de stockage d'objets. Une fois le téléchargement réussi du fichier, les informations du journal « Téléchargement réussi xxx » sont affichées.

4. Résumé

Cet article présente les connaissances pertinentes sur le stockage d'objets et utilise les bibliothèques de dépendances minio-go et godotenv pour implémenter le téléchargement et le téléchargement de stockage d'objets. En étudiant cet article, les lecteurs peuvent avoir une compréhension préliminaire des principes de mise en œuvre et des scénarios d'application du stockage objet et comment implémenter le stockage objet dans Golang. Il ne s'agit que d'une implémentation simple, et les lecteurs peuvent écrire un système de stockage d'objets plus complet en fonction de besoins spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn