Windows Azure Node.js SDK - 如何有效地查询表存储

时间:2012-10-30 00:37:41

标签: windows node.js azure sdk

我已经写了一个FB应用程序,并希望添加更多功能,并使其更具社交性。我要做的其中一件事是根据用户朋友查询表存储,并发现用户朋友是否在我的应用程序中“观看”了一个视频。我可以从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 ...
}

导致一个大胖子查询!

我的问题是,在针对Windows Azure Table Storage进行此类查询时,这是否是最有效且最具成本效益的(最小表存储事务),还是更好的方式?

1 个答案:

答案 0 :(得分:0)

考虑到Table Storage不是关系型数据库,这意味着你无法利用存储过程的强大功能,内置SUM等函数......这意味着你不能像服务器那样进行服务器计算计算单个用户的总命中数并返回该结果。

相反,使用表存储,您需要将所有这些数据和消费者方面的工作拉入其中。另一种解决方案是复制您的数据。可以使用视频,时间等信息记录每次点击的记录。但另一方面,您需要一个不同的表格,其中包含每个用户的总点击次数(如共享计数器)。

这样,当您想要单个用户的总点击次数时,您只需要查询该值,而无需一遍又一遍地重新计算。你会写2条记录而不是1条记录,但阅读速度会快得多。

史蒂夫马克思撰写了一篇很好的介绍性文章:Architecting Scalable Counters with Windows Azure