0

私のテーブルストレージには、パーティションごとに10.000個の要素があります。次に、パーティション全体をメモリにロードします。ただし、これには非常に時間がかかります。私は何か間違ったことをしているのか、それともこれをもっと速くする方法があるのか​​と思っていました。これが私のコードです:

        public List<T> GetPartition<T>(string partitionKey) where T : TableServiceEntity
        {
            CloudTableQuery<T> partitionQuery = (from e in _context.CreateQuery<T>(TableName)
                                                 where e.PartitionKey == partitionKey
                                                 select e).AsTableServiceQuery<T>();

            return partitionQuery.ToList();
        }

これは想定されている方法ですか、それともテーブルから要素を再び取り出すためのバッチ挿入と同等のものですか?

どうもありがとう、クリスチャン

編集

すべてのデータはBLOBストレージでも利用できます。つまり、1つのパーティションがbyte []として完全にシリアル化され、blobに保存されます。これをBLOBストレージから取得し、後で逆シリアル化すると、テーブルから取得するよりもはるかに高速になります。ほぼ10倍速くなります!どうすればいいの?

4

2 に答える 2

3

あなたの場合、変更追跡をオフにすると違いが生じると思います:

context.MergeOption = MergeOption.NoTracking;

その他の改善点については、MSDN を参照してください: Windows Azure テーブルの .NET and ADO.NET Data Service Performance Tips

編集: BLOB ストレージ内の大きなファイルが高速である理由の質問に答えるには、1 回の要求で取得できるレコードの最大量が 1000 アイテムであることを知っておく必要があります。つまり、10,000 個のアイテムをフェッチするには、BLOB ストレージに対して 1 回の要求ではなく、10 回の要求を行う必要があります。また、ブロブ ストレージを使用する場合、大きな影響を与える可能性がある WCF Data Services を使用しません。

于 2012-11-05T09:26:38.017 に答える
1

さらに、第 2 世代の Azure Storage を使用していることを確認してください。それをサポートしているデータ センターにいる場合は、基本的に "無料" のアップグレードです。SSD とアップグレードされたネットワーク トポロジを使用します。

http://blogs.msdn.com/b/windowsazure/archive/2012/11/02/windows-azure-s-flat-network-storage-and-2012-scalability-targets.aspx

Microsoft はお客様のアカウントを移行しません。アカウントを再作成するだけで、第 2 世代の Azure Storage に「無料でアップグレード」できます。

于 2012-11-05T13:30:31.543 に答える