この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Dynamoでシーケンスを使う
Oracleではシーケンスをつかって連番のidを発行することがよくあります。 DynamoDBではシーケンスの仕組みをデフォルトではもっていませんが、 少しコードを書くことでシーケンスのような機能を実現することができます。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.9.4
- node : v0.10.29
aws-sdkをnpmでインストールしておきましょう。
シーケンス発行関数を定義する
次のようにsequence関数を定義します。この関数ではシーケンス名とコールバックを受け取ります。 シーケンス名で連番を発行したあとその数値を保存し、発行したidをコールバックへ渡します。 ※シーケンス用テーブルは事前に作成しておいてください
AWS.config.update({
accessKeyId: <アクセスキー>,
secretAccessKey: <シークレットキー>,
region: <リージョン>});
var dyn = new AWS.DynamoDB();
function sequence(sequenceName,callback) {
var params = {
TableName: '<your sequence table name>',
Key: {name:{S:sequenceName}},
AttributeUpdates:{
current_number:{
Action: 'ADD',
Value:{N:"1"}
}
},
ReturnValues: 'UPDATED_NEW'
};
dyn.updateItem(params, function(err, data){
var id;
if (err) {
console.log(err); // an error occurred
} else {
id = data.Attributes.current_number.N;
}
callback(id);
});
}
あとはこの関数を、シーケンス発行したいタイミングで使用します。 同一のシーケンス名を複数回呼べば、カウンタが増えていくのがわかります。
sequence("somethingSeq",function(id){
console.log("sequence:" + id);
});