ob中內置join的意義

這個在0.5中應用,爲了解決收藏夾的問題,1.0後就沒有用了。
oceanbase中內置join的目的是爲了空間換時間,因爲在數據庫中,兩張表之間的join是非常耗時的,做法是在一張表中,冗餘另一張表的幾列,查詢的時候,只需要查詢一張表就行了。

以收藏夾爲例,收藏夾主要有兩張表,info(收藏表,存儲了收藏時間,收藏者等信息),item(商品表,存儲產品名稱,價格等信息)

當用戶查看自己的收藏記錄時,需要將每一個收藏商品的基本信息(價格,名稱等)顯示出來,這就需要做兩張表之間的join,拿info存儲的商品id到item表中查,這樣會損失很大的性能損失。而oceanbase使用寬表的技術解決了這個問題,將商品表的這些基本列冗餘存儲在info表中,這樣在查詢的時候只scan一張表就行。

而且如果沒有寬表的話,對item表的訪問將全部是隨機get,如果一個用戶收藏了100條商品的話,將會產生100次的get,這對性能影響也是很大的。

但是這樣帶來的問題時,當商品表有更新時,如何處理。因爲oceanbase的架構是基準數據+動態數據。在查詢時,只需要將info表的基準數據與info表的動態數據merge,與item表的動態數據join就行了,不需要與item表的靜態數據join。而每日合併時,會將item表的動態數據與info,item的靜態數據進行合併。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章