인용문:
최신 애플리케이션에는 강력하고 안정적이며 확장 가능하고 지연 시간이 짧은 데이터베이스 솔루션이 필요합니다. 성능, 가치, 확장성 등 데이터베이스 선택 시 고려해야 할 요소가 많이 있습니다. AWS DynamoDB는 인터넷 규모의 빅 데이터 수집을 처리하도록 설계된 완전 관리형 비관계형 데이터베이스로, 지연 시간이 짧고 확장 가능한 저장 및 검색 기능을 제공합니다. 이 기사에서는 Go 언어에서 AWS DynamoDB를 사용하는 방법에 중점을 두고 AWS DynamoDB를 심층적으로 살펴보겠습니다.
1. DynamoDB 소개
AWS DynamoDB는 AWS 클라우드 서비스의 일부이며 대규모 데이터 수집을 원활하게 처리할 수 있는 완전 관리형 비관계형 데이터베이스입니다. 편리한 API 인터페이스, 필요에 따라 확장할 수 있는 짧은 대기 시간 및 높은 처리량 기능을 통해 모든 애플리케이션에서 사용할 수 있습니다. 다른 데이터베이스 공급자에 비해 DynamoDB의 가장 큰 장점은 데이터를 저장하고 읽는 속도입니다. SSD(Solid State Drive)를 기본 저장 방식으로 사용하여 읽기 및 쓰기 속도가 매우 빠릅니다.
DynamoDB는 간단한 인터페이스를 가지고 있으며 Go 언어를 포함하여 Java, JavaScript, Python, Ruby 등과 같은 수많은 프로그래밍 언어와 플랫폼을 지원합니다. DynamoDB는 문서, 키-값, 그래프 등을 기반으로 하는 여러 데이터 모델을 사용하여 데이터 저장 및 쿼리 작업을 지원합니다. DynamoDB의 데이터 스토리지는 테이블 형식입니다. 각 테이블은 여러 프로젝트를 포함할 수 있으며 각 프로젝트는 여러 속성을 포함할 수 있습니다.
DynamoDB는 AWS Management Console 또는 AWS SDK를 통해 사용할 수 있습니다. AWS SDK를 실행하려면 코드에 자체 AWS 액세스 자격 증명을 배치하거나 안전하지 않은 환경 변수를 사용해야 합니다. 이러한 작성 방식은 보안 위험이 있으며 팀 개발에 편리하지 않습니다. 따라서 보다 세련되고 안전한 솔루션을 제공하는 Go용 AWS SDK를 사용하여 개발할 수 있습니다.
2. Go용 AWS SDK를 사용하여 DynamoDB에 연결
1. Go용 AWS SDK 설치
Go용 AWS SDK를 설치하려면 터미널에서 다음 명령을 실행하세요.
$ go get -u github.com/aws/aws-sdk-go
2.
DynamoDB에 연결하기 전에 Go용 AWS SDK에서 사용하는 AWS 액세스 키와 리전을 구성해야 합니다. 이렇게 하려면 코드에 다음 코드를 추가하세요.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!