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的静态数据进行合并。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章