作者:丁原 来源:Taobao DBA Team   酷勤网收集 2008-08-27

摘要
  核心sql放在索引里面扫描,尽量不回表,回表对一个大表,对高执行频率的sql来说,代价太大了,最近我发现有些需求会对核心sql进行调整,如增加一个字段,然后在查询条件中添加这个条件,我的思想是尽量做到不回表,那只能对索引进行调整

数据库面临什么问题?

1.淘宝这种高oltp系统中,有些核心sql的执行频率在千万次/小时之上,随着业务量的持续膨胀,执行次数开始成倍的增加,整个库高峰时期执行次数不下5000万/小时,为了应对数据库带来的瓶颈,我们开始对系统进行调整,从应用,从cache,从分布式数据上进行改造,对硬件进行升级,但这些都只是延缓数据库带来的压力,数据库还是容易达到极限,毕竟数据库是单点的,而执行次数在不断加速攀升。

2.核心sql放在索引里面扫描,尽量不回表,回表对一个大表,对高执行频率的sql来说,代价太大了,最近我发现有些需求会对核心sql进行调整,如增加一个字段,然后在查询条件中添加这个条件,我的思想是尽量做到不回表,那只能对索引进行调整,冗余新增加的字段,核心索引重建的风险还是很大的,会导致索引的字段会越来越多,而随着业务的复杂度增加,需要添加字段到索引中。

搜索引擎能解决什么?

在淘宝首页搜索商品(如诺基亚 N71),会显示一大堆的结果集来,这是通过搜索引擎来实现的。换个角度来思考,如想查看我的交易,可能也就传递一个id参数给搜索引擎,通过搜索引擎来查询,再比如查看我的收藏,我的宝贝,我的评价,也可以通过搜索引擎来实现。如果真是这样的,那搜索引擎对数据库来就大有价值了,淘宝的数据库读写比率很高,大部分性能都花在读上面,如果我们能把这部分sql迁移到搜索引擎上,效益是相当可观的。

我相信搜索引擎在淘宝会有很好的前景,并能真正应用到商品管理,交易管理,评价管理,收藏夹等业务中,期待这一天。
周五闲聊开发说他的目标是很多功能通过搜索引擎来实现,然后让我们这些dba失业,我倒是期望这一天早点到来,真正的把我们解放出来,而不是现在天天满脑子database,要跳出数据库的范畴,多去打打牌,喝喝茶,这样才会有创造力。

修文(17:28:00):
你们数据库不是升级到新的服务器,性能更强
丁原(17:30:19):
这是个问题,要解决问题,跟机器升级没有关系吧
修文(17:32:27):
先说明,这不是问题,是由业务去驱动的
丁原(17:33:26):
我知道啊,所以才靠你去驱动嘛
修文(17:36:07):
我想用实时SE
修文(17:36:20):
然后让你们失业,
丁原(17:36:25):
这个还早着呢,我估计。
修文(17:36:42):
都已经快上线了
丁原(17:36:57):
我们以后不仅仅是做数据库了,我们团队关注的是数据,是data,不仅仅是db。
丁原(17:41:56):
lg有没有计划使用se
修文(17:42:25):
只要SE稳定了,我就会提需求出来,还要看你们那边的压力呢
丁原(17:43:43):
我们这么大的业务量,不能总去去依赖数据库来实现,数据库是扛不住的,数据库是单点的,就算一直加cpu,加内存又有什么用呢
修文(17:45:46):
我们已经在想方案去解决了,实时SE就是。

--EOF--

评论:

  •  2westlife_xu

    当然前提的是实时搜索要成熟。
    收藏夹两个sql占用了很多很多的资源,查询条件简单,要嘛是userid,要嘛是collectid,这种情况是模拟搜索引擎完全是可以做到的,搜索引擎输入的是商品,这边输入的是userid,都是出来一堆list,从本质上来说没有区别。搜索引擎很容易扩展,服务器可以扩到很多台。
    复杂的业务肯定是不能放到搜索引擎来实现,核心,执行量很大的sql应该不会复杂的。

  •  3拖雷

    你那个文章很早了,记得有中文链接的。

    Search应对不同的List,一个索引很难做到的,基本上一个类型的查询,如一个List,就要一个索引。如果仅仅是把一些list,如分页,做成Search还是可行的,但是,如果涉及到更多的语句,因为业务的复杂性,Search就很难了。

    Search的灵活性肯定不如数据库这么好的,特别是real time search,要考虑的东西更多。

  •  4丁原

    我们去模拟search操作,比如在google输入条件,查询立刻会出来一堆list结果,还有分页的前1,2,3,4…10页,再如我的收藏,我的评价,我的商品,也是一堆分页list结果,这样在search上还是有点搞头的。
    核心sql一般不会复杂,查询条件是固定死的,像list的sql就更少了,做search我们可以做到需要什么dump什么,完全就是一个索引。
    任何东西都有自己的优势,包括cache,search,数据库,没有绝对的东西,cache也是要Cache Appropriately,合适的缓存。
    我觉的《可伸缩性最佳实践:来自eBay的经验》这篇文章还是相当值得一看

  •  5拖雷

    Cache是王道,Search只不过是更复杂的Cache而已,而real time search的技术更复杂一些。不是每个公司都有能力这么来实现。

    另外,不要以为Search了,就解决了所有问题,Search也有索引,Search的索引调整可能比数据库的索引调整更复杂,而且,当成千上万不同的语句,如果都要靠Search去解决,也得建立各种各样不同的索引,那么,Search的结构也变得异常复杂,甚至build也将成为严重的问题。

    任何时候,都不用担心数据库没有事情可以做,很多时候,数据库是最廉价,最方便的解决方案。而且,持久层是永远也少不了的,数据的最终安全,还是要靠数据库来实现。

  • 来自:http://rdc.taobao.com/blog/dba/html/201_db_use_isearch.html#comment-14341

    分类: 数据库开发 数据仓库 Web技术

    上一篇:数据库即服务是个坏主意吗?   下一篇:SQL Server 2008索引使用技巧