天天看點

淘寶海量資料庫之一:來自業務的挑戰

作為一個電子商務企業,從一開始,資料庫及其事務能力在淘寶就扮演着十分關鍵的角色,淘寶也積累了豐富的資料庫的架構和規劃等方面的經驗,産生了衆多優秀的dba。

淘寶是一家迅速發展的公司。全球網站排名公司alexa提供的資料顯示,2010年4月27日,amazon、ebay的使用者占全球網際網路使用者的百分比分别為3.47%和2.68%,而淘寶的使用者占全球網際網路使用者的百分比則達到了4.1%,淘寶網日獨立通路量從此超過了amazon和ebay。

淘寶的資料規模及其通路量對關系資料庫提出了很大挑戰:數十億條的記錄、數tb的資料、數千tps、數萬qps讓傳統的關系資料庫不堪重負,單純的硬體更新已經無法使得問題得到解決,分庫分表也并不總是湊效。下面來看一個實際的例子。

淘寶收藏夾是淘寶線上應用之一,淘寶使用者在其中儲存自己感興趣的寶貝(即商品,此外使用者也可以收藏感興趣的店鋪)以便下次快速通路、對比和購買等,使用者可以展示和編輯(添加/删除等)自己的收藏。

淘寶收藏夾資料庫包含了收藏info表(一條一條的收藏資訊)和收藏item表(被收藏的寶貝和店鋪)等:

收藏info表儲存收藏資訊條目,數十億條

收藏item表儲存收藏的寶貝和店鋪的詳細資訊,數億條

熱門寶貝可能被多達數十萬買家收藏

每個使用者可以收藏千個寶貝

寶貝的價格、收藏人氣等資訊随時變化

如果使用者選擇按寶貝價格排序後展示,那麼資料庫需要從收藏item表中讀取收藏的寶貝的價格等最新資訊,然後進行排序處理。如果使用者的收藏條目比較多(例如1000條),那麼查詢對應的item的時間會較長:假設如果平均每條item查詢時間是5ms,則1000條的查詢時間可能達到5s,若果真如此,則使用者體驗會很差。

如果把收藏的寶貝的詳細資訊實時備援到收藏info表,則上述查詢收藏item表的操作就不再需要了。但是,由于許多熱門商品可能有幾千到幾十萬人收藏,這些熱門商品的價格等資訊的變動可能導緻收藏info表的大量修改,并壓垮資料庫。

oceanbase是淘寶自主研發的海量資料庫,并且已經開源( http://oceanbase.taobao.org/ )。在應用團隊和oceanbase團隊的共同努力下,上述問題得到了很好地解決:平均響應時間幾十毫秒,最長響應時間一百多毫秒。與先前使用的關系資料庫相比,系統qps和tps提升了幾倍,伺服器數量反而減少了。

author:正祥