2016-04-27 8 views
1

私は複数のソースから更新されたステータスを格納する空のストレージテーブルを持っています。ソースIDとしてパーティションキーがあります(ソースごとに一意です)。ここで、任意のソースIDに対して、最後に更新されたステータスにアクセスしたいと思います。私はパーティションからの結果を降順でタイムスタンプでソートし、最初のレコードを取得することでこれを行うことができますが、パフォーマンスはあまり良くありません。各パーティションには1000を超えるレコードがあり、ソートは最良の方法ではないようです。パーティションの最後に挿入されたデータを取得するためにazureテーブルを照会します。

これを効率的に達成する方法は他にありますか?パーティション内のエンティティは、既に私が利用できる特定の行キーでソートされていますか?

答えて

4

RowKeyに時間とともに「減少」する値を挿入します。私はこれを使用します:
myentity.RowKey = String.Format("{0:D19}", DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks);

ここでは、主キーでwhere条件を指定してselectを実行し、続いてTake(1)を実行できます。これにより、最新のアイテムが表示されます。

+0

このソリューションは私たちのために働きますが、同時に2つのレコードが挿入される状況(非同期環境で)があり、同じ目盛りを持つことができますか?順序を維持することはできませんが、表の挿入は競合してエラーになります。それに対する迅速な解決策はありますか? –

+0

簡単な解決策:最後にGUIDを追加します。 myentity.RowKey = String.Format( "{0:D19}"、DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks)+ "_" + Guid.NewGuid()。ToString(); –