私はdynamodbを初めて使用しています。私はdynamodbでputitem
を使用すると自動的にid値をインクリメントしたいです。dynamodbでプライマリキーidにauto incrementを使用する方法
これは可能ですか?
私はdynamodbを初めて使用しています。私はdynamodbでputitem
を使用すると自動的にid値をインクリメントしたいです。dynamodbでプライマリキーidにauto incrementを使用する方法
これは可能ですか?
DynamoDBでは、これをそのまま使用することはできません。ほとんどのシステムでは一意でなければならないUUIDなど、アプリケーション内に何かを生成することができます。
あなたがNode.jsを使用していることに気付きました(あなたのタグを削除しました)。 README
var uuid = require('node-uuid');
var uuid1 = uuid.v1();
var uuid2 = uuid.v1({node:[0x01,0x23,0x45,0x67,0x89,0xab]});
var uuid3 = uuid.v1({node:[0, 0, 0, 0, 0, 0]})
var uuid4 = uuid.v4();
var uuid5 = uuid.v4();
FWIW私はDynamoでこのアプローチ(ハッシュキーとしてUUID)を使用しました。 – rpmartz
この回答は正解とマークする必要があります。また、キーを一様に配布する必要があり、自動インクリメントが不均一な分布につながるのはなぜですか?詳細については、次の記事を参照してください。https://forums.aws.amazon.com/thread.jspa?messageID=312527こちらのAWSドキュメント:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ BestPractices.html –
これは全体の多くのパーティション/破片/サーバをスケールするために構築されてDynamoDBの中にアンチパターンであるからnode-uuid
例:ここではUUID機能を提供するライブラリです。 DynamoDBはスケーリングの制限により自動インクリメントの主キーをサポートしておらず、複数のサーバーにわたって保証されていません。
複数のインデックスからプライマリキーをアセンブルする方がよいでしょう。主キーは2048バイトまで可能です。いくつかのオプションがあります:
コードが自動になるに従い増分カウンタを使用して、主キーとして使用できます。
var documentClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: 'sampletable',
Key: { HashKey : 'counters' },
UpdateExpression: 'ADD #a :x',
ExpressionAttributeNames: {'#a' : "counter_field"},
ExpressionAttributeValues: {':x' : 1},
ReturnValues: "UPDATED_NEW" // ensures you get value back
};
documentClient.update(params, function(err, data) {});
// once you get new value, use it as your primary key
私の個人的な好みはのhttp://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram
var EPOCH = 1300000000000;
function generateRowId(subid) {
var ts = new Date().getTime() - EPOCH; // limit to recent
var randid = Math.floor(Math.random() * 512);
ts = (ts * 64); // bit-shift << 6
ts = ts + subid);
return (ts * 512) + (randid % 512);
}
var newPrimaryHashKey = "obj_name:" + generateRowId(4);
2番目のポイントと最後のコードの詳細を追加できますか? 'subId'はシャードIDなのでしょうか? – andrhamm
可能な重複でのInstagramのシャーディングIDの生成に触発されたタイムスタンプ+ランダムを使用している[DynamoDBの中にUUIDを作成するには?](http://stackoverflow.com/questions/11721308/how-to-make-a-uuid-in-dynamodb) – Clarkie
またはこれ1つhttp://stackoverflow.com/questions/13264236/dynamodb-auto-incremented-id-server-time-ios-sdk – Clarkie