Discuz!NT千萬級資料量上的兩駕馬車--TokyoCabinet,MongoDB

來源:互聯網
上載者:User

在Discuz!NT的企業版設計過程中,處理大資料表一直是一個讓人頭疼的問題,特別是像主題表 (topic),使用者表(user)等,因為對於一個流量和發帖量都很大的論壇而言,在運行幾年之後,這兩 個表的資料量可能會破千萬(註:因為文章表採用分表機制,所以這裡暫未涉及,但出於效能考慮,也提 供了本文中類似的解決方案)。當時考慮的架構設計中有兩種思路來解決這種問題:

一種是採用類似MYSPACE的方式,即按一定記錄KEY值(比如使用者表的UID)來對大資料表中的記錄進行 分割,比如前200萬使用者(即:UID<200w)放入一個表,200-400萬的使用者放入另一個表,以此類推。 當然可以把幾個表都放到一個資料庫中,也可以放到別的 MSSQL資料庫上或執行個體上。但這種方案有一些問 題,例如當使用者表需要被聯表(如LEFT JION)查詢時使用,比如我們的文章表進行分頁查詢時就需要左 聯user表,這時如採用分表或分布式布署就可能面臨這樣的問題,不僅商務邏輯要變化,就連預存程序中 也要產生不小的變化,這裡還不考慮效率上的問題。當然有人建議可以使用資料冗餘的方式,比如在文章 表中冗餘使用者資訊相應欄位,但這種方案同樣要大幅度的修改即有代碼,同時如果使用者資訊發生變化時, 不僅要更新使用者表,還要更新文章表中的相應冗餘欄位,如果這兩者不同步,就會造成資料顯示異常,當 然在資料庫層面增加儲存成本也是不得不付出的。

第二種就是使用能處理大資料量表格的第三方工具,比如本文所說的TokyoTyrant,Mongodb等,這類 NOSQL軟體從一問世就是面向海量資料存放區訪問的,而且這類軟體往往都是開源的,另外通過與打算布署 企業版的使用者接觸,發現雖然他們的伺服器配置很高,但數量即不多,所以就要考慮如何最大限度的複用 已有的機器資源,而這類NOSQL軟體往往都是‘性價比’很高的,即用不多的資源(記憶體,CPU等)就能達 到意想不到的效果。當然我目前對其還是很謹慎的使用,即不會馬上把它當做主力資料存放區工具,而是輔 助MSSQL資料庫工具,所以大家在看完本文後會發現,這兩個工具在企業版中的角色頂多就是一個進階的 MEMCACEHD。不過我的想法很簡單,就是任何工具和技術,如果不是很瞭解它或者它很新,那麼必定要有 一個“考核期”,如果在‘任間’內它通過考核,才委以重任,如未通過考核,也不會讓系統平台承擔過 多的技術層面上的‘風險’。

綜上所述,最終我把方向放到了TokyoTyrant,Mongodb上,之所以選擇了這兩個工具,主要基於下面因 素:

1.海量資料的解決方案應該可以跑在LINUX和WINDOW平台上。當然有人會說Mongodb完全可以跑這兩個 平台,那還為什麼要引入 TokyoTyrant呢?其實這裡有一些產品的特殊情況要考慮,比如我們的使用者中絕 大多數對於資料的讀寫比在 4:1,即5條SQL訪問中有4條是SELECT操作,1條是CUD操作,這就造成了讀寫 比例的失衡。雖然Mongodb在讀寫效能上非常優異和穩定,但在並發讀上相對於TokyoTyrant+cabinet還是 有一些差距(注:更多內容參見該連結,然後這隻限於在我們產品中壓力測試環境下的結果,不具備普遍 性,所以希望大傢具體問題具體分析)

2.考慮到有些使用者公司是有相應技術儲備的,兩種方案也便於使用者公司進行的技術選型(當然因為采 用介面方式,使用者完全可以引入其它第三方的NOSQL工具來實現)。

好了,說了這麼多,開始今天的本文吧。

前面說過,該方案使用了介面方式,這裡就先看一下相應的介面聲明:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.