ホームページ > バックエンド開発 > Golang > Go での AWS DynamoDB の使用: 完全ガイド

Go での AWS DynamoDB の使用: 完全ガイド

PHPz
リリース: 2023-06-17 08:27:48
オリジナル
1548 人が閲覧しました

はじめに:

現代のアプリケーションには、強力で信頼性が高く、スケーラブルで遅延の少ないデータベース ソリューションが必要です。データベースの選択には、パフォーマンス、価値、スケーラビリティなど、考慮すべき要素が数多くあります。 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
ログイン後にコピー

2. AWS SDK for Go の設定

DynamoDB に接続する前に、AWS SDK for Go で使用される 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", ""),
}))
ログイン後にコピー

Where リージョンと資格情報は必須のオプションです。 [リージョン] プロパティでは、AWS リージョンを指定できます。認証情報は、AWS サービスに接続するために使用される認証メカニズムです。 AWS アクセス証明書が割り当てられていない場合は、AWS 管理ページで新しい証明書を作成できます。

3. テーブルの作成と削除

DynamoDB では、テーブルは、データの保存と取得に使用できる同じ属性を持つアイテムのコレクションです。新しいテーブルを作成するには、テーブル名、主キー、容量単位などの属性を決定する必要があります。次のコードは、AWS SDK for Go を使用して DynamoDB テーブルを作成する方法を示しています。

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)
ログイン後にコピー

作成が成功すると、新しく作成されたテーブルを DynamoDB コンソールで表示できます。テーブルを削除する場合は、次のコードを使用してください:

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)
ログイン後にコピー

4. データの追加、読み取り、削除

1. データの追加

次のコードは、その方法を示しています。 AWS SDK for Go を使用するには、DynamoDB テーブルにデータを追加します:

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
}
ログイン後にコピー

PutItemInput インターフェイスでは、Item プロパティを使用してテーブルに追加する項目を指定し、TableName プロパティを使用してテーブルに追加する項目を指定します。テーブル名。

2. データの読み取り

次のコードは、AWS SDK for Go を使用して DynamoDB テーブルからデータを読み取る方法を示しています:

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,
    )
}
ログイン後にコピー

GetItemInput インターフェイスでは、Key 属性テーブルから取得する項目を指定するには、TableName プロパティを使用してテーブル名を指定します。取得したデータは返された結果のItemプロパティに格納され、ループを使用して取得したデータを走査して出力できます。

3. データの削除

次のコードは、AWS SDK for Go を使用して DynamoDB テーブル内のデータを削除する方法を示しています:

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
}
ログイン後にコピー

DeleteItemInput では、Key 属性が使用されます削除された項目については、TableName プロパティを使用してテーブル名を指定します。

5. 条件式の使用

AWS DynamoDB は非常に強力で、データのクエリ、更新、削除のための条件式の使用をサポートしています。条件式は、AND 演算子、OR 演算子、関係演算子、関数などの論理演算子を使用して条件を構築します。次のコードは、AWS SDK for Go を使用して、特定の条件に基づいて DynamoDB テーブル内のデータをクエリする方法を示しています:

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)
}
ログイン後にコピー

QueryInput インターフェイスでは、KeyConditionExpression を使用してクエリの条件を指定します。条件の値を指定するために使用されます。TableName 属性はテーブル名を指定します。

6. DynamoDB でのトランザクション制御の使用

AWS DynamoDB は、読み取り状態および書き込み状態のときにトランザクション論理ユニットの整合性を確保できるトランザクション制御機能を提供します。 DynamoDB トランザクションは次の特性を満たす必要があります:

    操作をアトミックに処理し、正常にコミットまたはロールバックする;
  1. トランザクションを実行する操作は同じテーブル内で完了する必要があります。
次のコードは、Go でトランザクションを使用する方法を示しています。

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)
ログイン後にコピー

上記のコードでは、最初に DynamoDB クライアントを作成し、処理するテーブルを指定します。次に、キー「1」の商品データ レコードを削除するトランザクション操作が定義されます。最後に、DynamoDB トランザクション コンテキスト オブジェクトを定義し、実行するトランザクション操作を TransactWriteItems メソッドに渡します。

7. DynamoDB を使用して条件付きでデータを更新する

条件更新是将新值写回项目时使用的一种机制。当特定条件被给定时,更新操作将执行。要使用条件更新,必须满足以下条件:

  1. 更新目标必须存在;
  2. 更新操作必须基于某个条件执行。

下面是一个条件更新的示例:

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート