注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风轻扬

活着就是为了追求幸福

 
 
 

日志

 
 
关于我

关注互联网应用架构、分布式与海量数据处理技术、云计算、数据库技术

网易考拉推荐

多维度分类排行榜应用:用位图索引  

2009-11-02 17:49:51|  分类: WEB应用 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
有谁试过一张表上有50个索引,嗯,我不怎么敢。但有时有些应用的搜索条件就是很复杂,比如说有一类应用,姑且称之为多维度分类排行榜吧。这类应用的共同特征是对一个集合需要应用多种条件组合进行过滤,过滤后可能还要按某种指标进行排序。举几个例子吧:
1. 像网易拍拍一样的相册精华区,过滤条件非常多,如可以指定一级分类(如风景)、二级分类(如云南)、三级分类(如香格里拉),可以指定城市,可以指定是不是推荐的,还可以指定相机品牌或型号(有人还想指定镜头)。这就非常多了,恐怖的是这些条件还可以组合,比如指定用佳能相册拍香格里拉的,这样几十个组合是很正常的。
2. 像手机、汽车等等的产品中心网站,也可以指定很多过滤条件并任意组合,如价格,品牌,各种性能参数等等。过滤完了后,可能还要按价格或其它指标排序。

用数据库来做这类应用代价是很大的,对于数据库应用,一个基本的原则是:一种选择条件组合+排序组合对应一个索引,否则性能就不好,如果选择条件没有对应的索引,则可能要做表扫描或不理想的索引扫描,如果排序没有对应的索引,每次都需要找出所有满足过滤条件的记录然后排序。这样,对于上述复杂应用,需要建50个索引是很可能的,但问题是数据库一般支撑不了这么多个索引,索引越多,更新的性能越差。有几十个索引的数据库设计是很罕见的。

很多这类应用的解决办法可以用位图索引。位图索引的基本原则是:一个基础的选择条件+排序组合需要一个位图索引,这里“一个基础的选择条件”指的是在单个属性上的条件。用位图索引的时候,选择条件组合是不需要预先建好索引的,在求解时通过对基础的几个索引进行AND/OR位操作,可以很快的计算出结果。这样,使用位图索引时就不会存在条件组合爆炸的问题。而且,同样一个索引使用位图索引实现,比起用数据库里的B+树索引实现,占用的空间开销一般会小一个数量级。

使用位图索引的缺点是位图索引很难实时更新,或者说一定要支持实时更新的话,位图索引的实现就会很复杂,并且一定会导致时间和空间性能下降。因此位图索引通常不是实时更新的,而只能通过定期重建来更新。幸运的是对很多应用并不需要实时更新,比如产品中心,产品的信息是不经常更新的,数据库更新后过几分钟再更新位图索引也没什么问题。

一般的,如果要处理的数据量不过百万,那么实现分钟级的位图索引更新是不会有什么问题的。
  评论这张
 
阅读(1687)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017