Citation :
Les applications modernes nécessitent des solutions de bases de données puissantes, fiables, évolutives et à faible latence. De nombreux facteurs doivent être pris en compte lors de la sélection d'une base de données, tels que les performances, la valeur, l'évolutivité, etc. AWS DynamoDB est une base de données non relationnelle entièrement gérée, conçue pour gérer les collections de Big Data à l'échelle Internet, offrant des capacités de stockage et de récupération à faible latence et évolutives. Dans cet article, nous examinerons en profondeur AWS DynamoDB, en nous concentrant sur la façon de l'utiliser dans le langage Go.
1. Introduction à DynamoDB
AWS DynamoDB fait partie du service cloud AWS et est une base de données non relationnelle entièrement gérée qui peut gérer de manière transparente des collections de données à grande échelle. Son interface API pratique, sa faible latence et ses capacités de débit élevé qui peuvent être étendues à la demande permettent à n'importe quelle application de l'utiliser. Le plus grand avantage de DynamoDB par rapport aux autres fournisseurs de bases de données réside dans la vitesse à laquelle il stocke et lit les données. Il utilise le SSD (Solid State Drive) comme méthode de stockage par défaut, ce qui le rend très rapide en lecture et en écriture.
DynamoDB possède une interface simple et prend en charge un grand nombre de langages et de plateformes de programmation, tels que Java, JavaScript, Python, Ruby, etc., y compris le langage Go. DynamoDB prend en charge les opérations de stockage de données et de requêtes à l'aide de plusieurs modèles de données basés sur des documents, des valeurs-clés, des graphiques, etc. Le stockage des données de DynamoDB se présente sous la forme de tables. Chaque table peut contenir plusieurs projets et chaque projet peut contenir plusieurs attributs.
DynamoDB peut être utilisé à l'aide d'AWS Management Console ou du SDK AWS L'exécution du SDK AWS nécessite de placer vos propres informations d'identification d'accès AWS dans le code ou d'utiliser des variables d'environnement non sécurisées. Cette façon d’écrire comporte des risques de sécurité et n’est pas pratique pour le développement d’une équipe. Par conséquent, nous pouvons développer à l'aide du kit AWS SDK for Go, qui offre une solution plus élégante et plus sécurisée.
2. Utilisez AWS SDK for Go pour vous connecter à DynamoDB
1 Installez AWS SDK for Go
Exécutez la commande suivante dans le terminal pour installer AWS SDK for Go :
$ go get -u github.com/aws/aws-sdk-go
2.
avant de vous connecter à DynamoDB, vous devez configurer la clé d'accès AWS et la région utilisées par le kit AWS SDK for Go. Pour ce faire, ajoutez le code suivant à votre code :sess := session.Must(session.NewSession(&aws.Config{ Region: aws.String("us-west-2"), Credentials: credentials.NewStaticCredentials( "YOUR_ACCESS_KEY_ID", "YOUR_SECRET_ACCESS_KEY", ""), }))
svc := dynamodb.New(sess) input := &dynamodb.CreateTableInput{ AttributeDefinitions: []*dynamodb.AttributeDefinition{ { AttributeName: aws.String("ID"), AttributeType: aws.String("N"), }, { AttributeName: aws.String("Name"), AttributeType: aws.String("S"), }, }, KeySchema: []*dynamodb.KeySchemaElement{ { AttributeName: aws.String("ID"), KeyType: aws.String("HASH"), }, { AttributeName: aws.String("Name"), KeyType: aws.String("RANGE"), }, }, ProvisionedThroughput: &dynamodb.ProvisionedThroughput{ ReadCapacityUnits: aws.Int64(5), WriteCapacityUnits: aws.Int64(5), }, TableName: aws.String("TableName"), } result, err := svc.CreateTable(input) if err != nil { fmt.Println(err) return } fmt.Println(result)
svc := dynamodb.New(sess) input := &dynamodb.DeleteTableInput{ TableName: aws.String("TableName"), } result, err := svc.DeleteTable(input) if err != nil { fmt.Println(err) return } fmt.Println(result)
svc := dynamodb.New(sess) input := &dynamodb.PutItemInput{ Item: map[string]*dynamodb.AttributeValue{ "ID": { N: aws.String("123"), }, "Name": { S: aws.String("John"), }, "Age": { N: aws.String("29"), }, }, TableName: aws.String("TableName"), } _, err := svc.PutItem(input) if err != nil { fmt.Println(err) return }
svc := dynamodb.New(sess) input := &dynamodb.GetItemInput{ Key: map[string]*dynamodb.AttributeValue{ "ID": { N: aws.String("123"), }, "Name": { S: aws.String("John"), }, }, TableName: aws.String("TableName"), } result, err := svc.GetItem(input) if err != nil { fmt.Println(err) return } for key, value := range result.Item { fmt.Println( key, ":", value.S, value.N, value.BOOL, ) }
svc := dynamodb.New(sess) input := &dynamodb.DeleteItemInput{ Key: map[string]*dynamodb.AttributeValue{ "ID": { N: aws.String("123"), }, "Name": { S: aws.String("John"), }, }, TableName: aws.String("TableName"), } _, err := svc.DeleteItem(input) if err != nil { fmt.Println(err) return }
svc := dynamodb.New(sess) input := &dynamodb.QueryInput{ KeyConditionExpression: aws.String("ID = :idval"), ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{ ":idval": { S: aws.String("123"), }, }, TableName: aws.String("TableName"), } result, err := svc.Query(input) if err != nil { fmt.Println(err) return } for _, item := range result.Items { fmt.Println(item) }
sess := session.Must(session.NewSessionWithOptions(session.Options{ SharedConfigState: session.SharedConfigEnable, })) db := dynamodb.New(sess) tableName := aws.String("product") txOps := []*dynamodb.TransactWriteItem{ { Delete: &dynamodb.Delete{ TableName: aws.String(*tableName), Key: map[string]*dynamodb.AttributeValue{ "product_id": {N: aws.String("1")}, }, }, }, } txCtxt := &dynamodb.TransactWriteItemsInput{ TransactItems: txOps, } result, err := db.TransactWriteItems(txCtxt) if err != nil { fmt.Println("failed to delete product 1") return } fmt.Println(result)
条件更新是将新值写回项目时使用的一种机制。当特定条件被给定时,更新操作将执行。要使用条件更新,必须满足以下条件:
下面是一个条件更新的示例:
updateInput := &dynamodb.UpdateItemInput{ TableName: aws.String("product"), Key: map[string]*dynamodb.AttributeValue{ "product_id": {N: aws.String("2")}, }, UpdateExpression: aws.String("set productName = :n"), ConditionExpression: aws.String("attribute_exists(product_id)"), ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{ ":n": {S: aws.String("product_name_new")}, }, } _, err = db.UpdateItem(updateInput) if err != nil { fmt.Println(err) return }
上述示例是使用条件更新更新了产品ID为“2”的产品名称。在条件表达式中,我们使用了attribute_exists
函数来检查该项目是否存在。
八、总结
在本文中,我们深入介绍了 DynamoDB 及其在Go语言中的使用方法。我们讨论了配置 AWS SDK for Go,创建和删除表,添加、读取和删除数据,使用条件表达式,事务控制以及条件更新数据。由于 DynamoDB 具有可伸缩性、高可用性和良好的性能,因此可以成为处理大规模数据集合的首选数据库解决方案之一。
如果您想开始使用 AWS DynamoDB 和 Go,强烈建议您参考 AWS 官方文档 以便获得更详细的信息和 API 示例。
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!