Maison >développement back-end >Golang >Implémentation de Golang de stockage d'objets
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 :
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# 🎜🎜#
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!