使用Riak的活动源

时间:2013-02-13 13:01:16

标签: database web-applications database-design nosql riak

本周我读了一篇有趣的article来解释作者如何实施一项活动。基本上,他们使用两种方法来处理活动,我正在适应我的场景,所以我们假设我们拥有一个拥有一定数量(x)粉丝的用户foo:

if x<500, then the activity will be copyied to every follower feed
    this means slow writes, fast reads
if x>500, only a link will be made between foo and his followoers
    in theory, fast writes, but will slow reads

因此,当某些用户访问您的活动源时,服务器将获取并合并所有数据,因此这意味着在他们自己的复制活动中快速查找,然后查询链接。如果时间轴的限制为20,那么我每次获取10个然后合并。

我正在尝试使用Riak和Linking的功能,所以这是我的问题:链接速度快于复制吗?我对架构的想法够好吗?我应该看到其他解决方案和/或技术吗?

PS:我没有为生产实现一个活动源,它只是为了学习如何实现一个表现良好并且使用Riak的一个。

1 个答案:

答案 0 :(得分:2)

两个想法。

1)不,Linking(在Riak Link Walking意义上)很可能不是实现这一目标的正确方法。例如,每个链接都存储为一个单独的HTTP标头,HTTP规范中建议您应该发送多少个标头字段。 (虽然,公平地说,在测试中你可以在标题中使用超过1000个链接与Riak,似乎工作正常。但不推荐)。更重要的是,通过Link Walking api查询这些链接实际上在后端使用了MapReduce,而且对于你想要的那种用法来说速度相当慢。

这并不是说你不能存储链接列表的JSON对象,当然,这是一种有效的方法。我只是建议不要使用Riak链接。

2)至于如何正确实施它,这是一个更难的问题,并取决于您的流量和用例。但是你的一般方法是有效的 - 复制一些X更新值的提要(X是500还是小得多,应该在测试中确定),并在更新次数大于X时链接。

你应该如何联系?你有3个选择,都有权衡。 1)使用辅助索引(2i),2)使用搜索,或3)使用“手动”链接,这意味着将JSON文档存储为您手动取消引用的URL(而不是使用链接步行查询)。

我强烈建议观看此视频:http://vimeo.com/album/2258285/page:2/sort:preset/format:thumbnail(在Riak上构建社交应用程序),由剪贴板工程师,看看他们是如何解决这个问题的。 (他们基本上使用了搜索链接。)