2012-10-30 19 views
0

我写了一个FB应用程序,并希望添加更多功能并使其更具社交性。我试图做的事情之一是根据用户朋友的查询表存储,并发现用户朋友是否在我的应用程序中“观看”了一个视频。我可以从FB精细朋友的ID,但我不知道如何构建我的查询表存储,因为一个FB用户可以拥有的朋友的最大数量是5000所以可能我可以像这样的查询结束:Windows Azure Node.js SDK - 如何高效查询表存储

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表存储这种性质的查询或为他们更好的办法是什么时候?

+0

嗨 - 抱歉,但我不明白你想实现什么。你是否试图:(1)获得观看视频的朋友的“数量”? (2)获取观看视频的朋友FB ID的'列表'? (3)“任何”朋友是否观看过视频?我想你可以有不同的设计,具体取决于你想要做的。你能澄清吗? –

回答

0

保持虑表存储不是一个关系数据库,这意味着你不能充分利用的存储过程的功率,内置的功能,如SUM等等......这意味着你不能做服务器端计算比如计算单个用户的总点击率并返回结果。

而是与表存储,您需要在所有这些数据,并在消费者方面的工作拉。不同的解决方案是复制您的数据。每次点击时都有一个关于视频,时间等信息的记录是很好的......但另一方面,您需要一个包含每个用户总点击量的不同表格(如共享计数器)。

这样,当你想要的总命中为你只需要查询值的单个用户,而不必一遍遍重新计算。你会写2条记录而不是1条,但是阅读速度会更快。

史蒂夫马克思写了一个很好的介绍后:Architecting Scalable Counters with Windows Azure

+0

嗨Sandrino,谢谢你的回复。是的,我熟悉你的论点,并且已经实施了特定的表格来计算东西以减少提取和查询。我仍然没有看到,我怎么能够接收5000个朋友,然后问这个问题来存储系统中是否存在匹配。我不得不每次都这样做吗?这正是我想要问的。 –