0

FB アプリを作成しましたが、さらに機能を追加してよりソーシャルにしたいと考えています。私がやろうとしていることの 1 つは、ユーザーの友人に応じてテーブル ストレージをクエリし、ユーザーの友人がアプリ内でビデオを「見た」かどうかを調べることです。FBからフレンドIDを取得できますが、FBユーザーが持つことができるフレンドの最大数は5000であるため、テーブルストレージへのクエリを作成する方法がわかりません。そのため、次のようなクエリになる可能性があります。

var ts1 = azure.createTableService(config.storageAccount, config.storageAccessKey, config.tableHost);
var query = azure.TableQuery
    .select()
    .from('hits')
    .where('PartitionKey eq ?', '0')

for (f in friends){
    query.or('UserID eq ?', friends[f].UserID);
}

ts1.queryEntities(query, function (err, result){
    etc ...
}

1 つの大きな脂肪クエリが発生します。

私の質問は、Windows Azure テーブル ストレージに対してこのようなクエリを実行する場合、これが最も効率的で費用対効果が高い (最小限のテーブル ストレージ トランザクション) であるか、それともより良い方法であるかということです。

4

1 に答える 1

0

Table Storage はリレーショナル データベースではないことに注意してください。これは、ストアド プロシージャの機能や、SUM などの組み込み関数を活用できないことを意味します。つまり、合計のカウントなどのサーバー側の計算を実行できないことを意味します。 1 人のユーザーに対してヒットし、その結果を返します。

代わりに、Table Storage を使用すると、このすべてのデータを取り込み、コンシューマー側で作業する必要があります。別の解決策は、データを複製することです。ビデオ、時間などの情報を含む各ヒットのレコードを作成しても問題ありませんが、一方で、各ユーザーの合計ヒット数を含む別のテーブルが必要になります (共有カウンターなど)。

そうすれば、1 人のユーザーの合計ヒット数が必要な場合、値を何度も再計算することなく、値を照会するだけで済みます。1 つではなく 2 つのレコードを書き込みますが、読み取りは非常に高速になります。

これについて Steve Marx が優れた紹介記事を書いています: Architecting Scalable Counters with Windows Azure

于 2012-10-30T06:54:00.797 に答える