AWS Lambda DynamoDBでauto incrementを実装する【nodejs】

DynamoDBではauto incrementの利用方法が少し難しいです。

おそらく、ソートキーにauto incrementを設定したいパターンが多いと思います。

方法としては、各テーブルのレコード数を管理するテーブルを作成し、その値を更新、取得し利用する感じです。

 

まずは、レコード数を管理するシーケンステーブルを作成します。

テーブル名は、「sequence」としておきましょう。

primary key(主キー)は、「name」とします。

このカラムには、どのテーブルを管理するか、テーブル名を入れます。

そのため、型はStringとします。

 

テーブルが作成できたら、レコードを作成します。

name に管理するテーブル名。

current_numberに0を設定します。

こちらには、各テーブルのレコード数を保存します。

 

準備はこれで終わりです。

次は、lambdaでの処理を記述していきます。

 

見本

'use strict';
var aws = require('aws-sdk');
var docClient = new aws.DynamoDB.DocumentClient();

exports.handler = function (event, context) {
    
    var table = 'テーブル名';

    sequence(table, function(id) {
        var item = {
               id:id
        };
        var params = {
            TableName: table,
            Item: item
        };
        docClient.put(params, function (err, data) {
            if (err) {
                console.log(err);
            } else {
                console.log(data);
            }
        });
    });
};
  
function sequence(sequenceName, callback) {
    const params = {
        TableName: "sequence",
        Key: {
            name: sequenceName
        },
        UpdateExpression: "set current_number = current_number + :val",
        ExpressionAttributeValues: {
            ":val":1
        },
        ReturnValues: "UPDATED_NEW"
    };
       
    docClient.update(params, function(err, data) {
        let id;
        if (err) {
            console.error('Unable to update item. Error JSON:', JSON.stringify(err, null, 2));
        } else {
            console.log('UpdateItem succeeded:', JSON.stringify(data, null, 2));
            id = data.Attributes.current_number;
        }
        callback(id);
    });
}

 

参考:https://qiita.com/naoki_koreeda/items/4fa3daa7812410c10cf8

 

こちらの処理を実行することで、管理される側のテーブルのidが1ずつインクリメントされるようになります。

また管理するテーブルを増やす場合には、seaquenceテーブルに管理するテーブルのレコードを追加します。

 

なぜauto incrementを実装するのか

これは、人にとって理由は様々かと思いますが、ほとんどはソートキーを利用するためなのだと思います。

DynamoDBでは、データを取得した際に、そのデータの順番は決まっておらず、ランダムで取得されてしまいます。

しかし、ソートキーを設定すれば、勝手にその順番にソートしてくれるため、DBの取り扱いがしやすくなります。

 

関連書籍

created by Rinker
¥3,300 (2024/04/25 17:53:36時点 楽天市場調べ-詳細)

 

コメントを残す

CAPTCHA