顧客がメッセージを投稿するAzureテーブルがあり、1つのテーブルに数百万のメッセージが存在する可能性があります。私は過去10分間にメッセージを投稿する最速の方法を見つけたいと思っています(これは、Webページを更新する頻度です)。パーティションキーのみが索引付けされているので、私は日付が&の日付を使用するというアイデアを持っていました。たとえば、「2009-06-15T13:45:30.0900000」のようなISO8601日付書式の文字列がパーティションキーとしてメッセージとして投稿されました。Azureテーブルの最新のアイテムを検索する最速の方法は?
例の擬似コード:
var message = "Hello word!";
var messagePartitionKey = DateTime.Now.ToString("o");
var messageEntity = new MessageEntity(messagePartitionKey, message);
dataSource.Insert(messageEntity);
、その後、(再びテストされていない疑似コード)は、このような最後の10分以内に投稿されたメッセージを照会:
// Get the date and time 10 minutes ago
var tenMinutesAgo = DateTime.Now.Subtract(new TimeSpan(0, 10, 0)).ToString("o");
// Query for the latest messages
var latestMessages = (from t in
context.Messages
where t.PartitionKey.CompareTo(tenMinutesAgo) <= 0
select t
)
しかし、これは、によっても取られますインデックス?それとも、それは完全なテーブルスキャンを引き起こすでしょうか?誰もがこれを行うより良いアイデアを持っていますか?私は、各テーブル項目にタイムスタンプがあることを知っていますが、索引付けされていないので、自分の目的には遅すぎます。
サイドローブとして、より一般的なものをパーティションキーとして使用することをお勧めします。あなたの投稿が所属する場所など。 http://msdn.microsoft.com/en-us/library/windowsazure/hh508997.aspxを見てください –
同じマシンが挿入とクエリの両方を実行していますか?そうでない場合は、クライアント間のクロックスキューを考慮する必要があります。 –