2013-02-13 62 views
1

本週我讀了一個有趣的article,解釋了作者如何實施一項活動。基本上,他們使用兩種方法來處理活動,我適應我的情況,所以,以爲我們哈瓦誰擁有追隨者的一定數量(x)的一個用戶foo:活動飼料與Riak

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一點。

回答

2

兩個想法。

1)不,Linking(在Riak鏈接步行的意義上)很可能不是實現這一點的正確方法。首先,每個鏈接都存儲爲一個單獨的HTTP標頭,並且HTTP規範中建議限制您應發送多少個標題字段。 (雖然,公平地說,在測試中,您可以在Riak中使用1000以上的鏈接,似乎工作正常,但不推薦)。更重要的是,通過Link Walking api查詢這些鏈接實際上是在後端使用MapReduce,並且對於您打算使用的這種用法相當緩慢。

這並不是說你不能存儲鏈接列表的JSON對象,當然,這是一種有效的方法。我只是建議不要使用Riak鏈接。

2)至於如何正確實現它,這是一個更難的問題,並取決於您的流量和用例。但是您的一般方法是有效的 - 複製Feed的某些X值更新(無論X是500還是小得多,應在測試中確定),並在更新次數大於X時鏈接。

應該如何你鏈接?你有3個選擇,所有的權衡。 1)使用輔助索引(2i),2)使用搜索,或3)使用手動鏈接,意思是將JSON文檔存儲爲手動解除引用的URL(與使用鏈接步行查詢相比)。

我強烈推薦觀看這段視頻:http://vimeo.com/album/2258285/page:2/sort:preset/format:thumbnail(在Riak上構建一個社交應用程序),由剪貼板工程師來看看他們是如何解決這個問題的。 (他們基本上使用搜索鏈接)。

+0

非常感謝! – 2013-03-01 12:06:57