3

Windows Azureテーブルストレージには、IDの自動インクリメントを可能にする「タイプ」はありません。「IsIdentity」を使用できると思いましたが、チェックボックスがグレー表示されています(これにより、自動インクリメントが表示されますよね?)。

自動インクリメントフィールドまたは回避策を取得する方法について誰かにアドバイスしてもらえますか?

ありがとう!

4

1 に答える 1

7

何らかの理由で、実際に単調に増加する数値キーが必要な場合を除いてDateTime.UtcNow.Ticks.ToString()、通常のアプローチはを使用します。(テーブルストレージのPartitionKey値は文字列であるため、変換する必要があります。)

このアプローチの利点は、テーブルストレージの行がPartitionKeyによって(次にRowKeyによって)自動的に並べ替えられるため、SQL ServerのIDENTITY列と同じように、行が挿入された順序に戻ることです。

レコードを最新のものから最初に返す場合は、(long.MaxValue - DateTime.UtcNow.Ticks).ToString()代わりにを使用します。

最初の方法では、今後1158年間は18桁の数字が表示されることに注意してください。Y3160のバグを回避したい場合は、値に先行ゼロ(DateTime.UtcNow.Ticks.ToString("0000000000000000000"))を埋め込むことを検討してください。

2番目の方法では、DateTime.MaxValueをはるかに超えて、非常に長い間19桁の数値が得られるため、おそらく問題ありません。

また、負荷分散などでは、2つのサーバーがまったく同時にレコードを作成した場合に重複が発生する可能性が非常に低いため、キー値を1つ増やす再試行セマンティクスが必要になることにも注意してください。

于 2012-09-08T21:11:09.897 に答える