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

Windows Azure Node.js SDK-如何高效查询表存储,windows,node.js,azure,sdk,Windows,Node.js,Azure,Sdk,我已经写了一个FB应用程序,并希望添加更多功能,使其更具社会性。我正在尝试做的事情之一是根据用户朋友查询表存储,并发现用户朋友是否在我的应用程序中“观看”了视频。我可以从FB获得好友ID,但我不确定如何构造表存储的查询,因为FB用户可以拥有的最大好友数为5000,因此我可能会得到如下查询: var ts1 = azure.createTableService(config.storageAccount, config.storageAccessKey, config.tableHost); va

我已经写了一个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表存储执行这种性质的查询时,这是最高效、最经济的(最少的表存储事务),还是更好的方法?

请注意表存储不是关系数据库,这意味着您无法利用存储过程的强大功能,内置函数,如SUM等。。。这意味着您无法进行服务器端计算,例如计算单个用户的总点击数并返回结果

取而代之的是使用表存储,您需要将所有这些数据拉入到用户端的工作中。另一种解决方案是复制数据。它的罚款有一个记录,如视频信息,时间。。。但另一方面,您需要一个不同的表,其中包含每个用户的总点击量(如共享计数器)

这样,当您需要单个用户的总点击率时,只需查询该值,而无需反复重新计算。您将写入2条记录,而不是1条,但读取速度会快得多


史蒂夫·马克思(Steve Marx)为此写了一篇很好的介绍性文章:

嗨-对不起,我无法准确理解你想要实现的目标。你是否试图:(1)获得观看视频的朋友的“计数”?(2) 获取观看视频的朋友FB ID的“列表”?(3) 是否有“任何”朋友看过该视频?我想你可以有一个不同的设计,具体取决于你想做什么。你能澄清一下吗?嗨,桑德里诺,谢谢你的回复。是的,我熟悉你的论点,并且已经实现了一些特定的表来计算数据,以减少获取和查询。我仍然不知道如何才能在接收5000个朋友后,向存储表询问系统中是否存在匹配项。我每次都得这么做,不是吗?这正是我想问的。