2009-12-07 106 views
2

我在Erlang建立一個Reddit克隆。我正在考慮使用一些erlang web框架,但這不是問題。NoSql - 這是最適合我的需求 - 我有精神崩潰

我在選擇數據庫時遇到問題。

它是如何工作的;

我有多個專用的reddits。例如,科學,搞笑,公司,體育。你可以考慮他們的子reddits。每個子reddit都有類別。

用戶可以發佈以下信息:

標題, 分類 標籤, 描述, 類別, 未來日期

,並添加圖片,鏈接。視頻

與Reddit一樣,用戶將能夠對 投票的故事和評論。評論也會有投票系統。

問題出在哪裏;

我不知道使用什麼NoSQL數據庫,該網站將有與MySQL的可擴展性問題(相信我,它將不會提示sql)將有大約10,000-20,000併發連接,如果不是更多。

現在我需要什麼;

1)用戶會去運動版(Subreddit),

他們會希望看到一個未來日期所有的故事,例如NFL類別,或足球世界盃類別,他們可能希望看到所有的故事與未來日期表示即將到來的遊戲或事件。

但是,由於人們可能會發表垃圾,我需要說按未來日期排序,但然後過濾結果的帖子多5票,然後我需要顯示最近的即將到來的事件。

所以如果週末有一場比賽而下一場比賽再次是3周,那麼最接近的比賽需要首先出現。

2),因此上述問題,是使用一個數據庫

1)查找版(Subreddit)的所有帖子:體育。 2)在NFL類別中找到al帖子。 3)查找未來日期的所有文章。通過最多投票和顯示故事與最近日期到今天。

我想CouchDB的看起來像一個很好的候選人,但我不知道

但對於卡珊德拉,HBase的,了Riak,Neo4j的?

我要瘋了試圖弄清楚這一點。

我需要一些能夠擴展和處理大量用戶的東西。

請幫幫忙,謝謝

+0

MySQL和MySQL之前的Memcached會有可擴展性問題嗎?假設你不必爲每個訪問者提供完全獨特的數據,這可能是一個好方法,並且避免了進入NoSQL荒野的必要。 – 2009-12-07 02:09:57

+0

我對Couchdb中的視圖系統有點不清楚。 我知道我可以建立多個視圖來排序相同的數據。 但這個觀點有多複雜? 可以查看 1)查找subreddit中的所有帖子:Sport。 2)查找NFL類別的所有文章。 3)查找具有未來日期的所有帖子。按大多數投票排序這些帖子,並顯示與當天最近的日期。 WOuld我必須定義一個「每個subreddit」視圖?因爲我將擁有大約25,000個子目錄。用戶將能夠在reddit中製作自己的reddit和類別。 – Toomanybrokenkeyboards 2009-12-07 02:12:46

+0

您不必爲每個視圖定義單獨的視圖。 Subreddit應該是你發出的鍵的第一個元素,所以你可以在你的請求中只選擇一個使用from-to字段。但是,您將不得不爲每個不同的排序都有一個單獨的視圖(不包括上升/下降)。 – Zed 2009-12-07 07:35:05

回答

2

卡桑德拉應該爲你工作得很好; 「用戶對以不同方式展示的東西進行投票」聽起來與Digg所做的非常相似(他們正在完全轉向Cassandra)。

卡桑德拉的遊戲名稱是反規範化。因此,對於每個類別或子版本,您將有一個包含帖子的行。如果你一次只查詢相對較少的故事,那麼你可能會離開而不是反規範化發佈信息(包括投票計數)本身,而只是用multiget。對於較大的批次,您應該將其複製到每個帖子列中,這樣您就不必執行額外的獲取。

如果您使用類似TimeUUID的方式來臨時排列您的列,那麼「在類別X中給我所有在今天的日期之後的所有內容」是微不足道的,然後您可以通過投票計數客戶端進行排序。 (爲什麼不對服務器端進行排序?因爲這不會擴展。)

+0

@jbellis - 順便說一句,排序客戶端意味着在JS或其他? – viksit 2010-02-25 19:25:45