はじめに:
現代のアプリケーションには、強力で信頼性が高く、スケーラブルで遅延の少ないデータベース ソリューションが必要です。データベースの選択には、パフォーマンス、価値、スケーラビリティなど、考慮すべき要素が数多くあります。 AWS DynamoDB は、インターネット規模のビッグデータ収集を処理するように設計されたフルマネージドの非リレーショナル データベースで、低レイテンシでスケーラブルなストレージと取得機能を提供します。この記事では、Go 言語での使用方法に焦点を当てて、AWS DynamoDB について詳しく説明します。
1. DynamoDB の概要
AWS DynamoDB は AWS クラウド サービスの一部であり、大規模なデータ収集をシームレスに処理できるフルマネージドの非リレーショナル データベースです。便利な API インターフェイス、オンデマンドで拡張できる低遅延、高スループット機能により、あらゆるアプリケーションで使用できます。他のデータベースプロバイダーに対する DynamoDB の最大の利点は、データの保存と読み取りの速度です。デフォルトのストレージ方式として SSD (ソリッド ステート ドライブ) を使用するため、読み取りと書き込みが非常に高速になります。
DynamoDB はシンプルなインターフェイスを備えており、Go 言語を含む Java、JavaScript、Python、Ruby などの多数のプログラミング言語とプラットフォームをサポートしています。 DynamoDB は、ドキュメント、Key-Value、グラフなどに基づく複数のデータ モデルを使用したデータ ストレージとクエリ操作をサポートします。 DynamoDB のデータ ストレージはテーブルの形式であり、各テーブルには複数のプロジェクトを含めることができ、各プロジェクトには複数の属性を含めることができます。
DynamoDB の使用は、AWS マネジメント コンソールまたは AWS SDK を使用して行うことができます。同時に、AWS SDK を実行するには、コードに独自の AWS アクセス認証情報を配置するか、安全でない環境変数を使用する必要があります。 。この書き方にはセキュリティ上のリスクがあり、チーム開発には不便です。したがって、よりエレガントで安全なソリューションを提供する AWS SDK for Go を使用して開発できます。
2. AWS SDK for Go を使用して DynamoDB に接続します
1. AWS SDK for Go をインストールします
ターミナルで次のコマンドを実行して、Go の AWS SDK をインストールします。 ##
$ go get -u github.com/aws/aws-sdk-go
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 示例。
以上がGo での AWS DynamoDB の使用: 完全ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。