新闻产经轻工日化电器通讯仪器机械冶金矿产建筑建材石油化工食品医药电子电工能源电力交通运输农业环保图片手机版
当前位置:中国市场调查网>产业>科技>  正文

圆桌沙龙:NoSQL技术实战

中国市场调查网  时间:03/05/2012 16:36:12   来源:CSDN

  时至今日,“Big data”(大数据)时代的来临已经毋庸置疑,尤其是在电信、金融等行业,几乎已经到了“数据就是业务本身”的地步。这种趋势已经让很多相信数据之力量的企业做出改变。恰逢此时,为了让更多的人了解和使用分析大数据,CSDN(微博)独家承办的大数据技术大会于今日在北京中旅大厦召开。本次大会汇集Hadoop、NoSQL、数据分析与挖掘、数据仓库、商业智能以及开源云计算架构等诸多热点话题。包括百度、淘宝、新浪等业界知名专家与参会者齐聚一堂,共同探讨大数据浪潮下的行业应对法则以及大数据时代的抉择。

从左至右分别为程显峰、丛磊、李祎、杨志丰、巨建华

  从左至右分别为程显峰、丛磊、李祎、杨志丰、巨建华

  传统的关系数据库在应付web2.0网站网站时暴露了很多难以克服的问题:web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,数据库并发负载非常高,往往要达到每秒上万次读写请求。对于关系数据库来说,在如此海量的信息中进行SQL查询,效率是极其低下乃至不可忍受的。

  在最后的沙龙环节中MongoDB中文社区创始人程显峰、淘宝核心系统存储系统研发专家杨志丰、新浪云计算高级技术经理丛磊、139说客架构师李祎、ymall.com技术总监巨建华就对如何理性考量NoSQL、NoSQL基准测试要点、NoSQL和云计算整合趋势、NoSQL和分布式计算的结合等问题展开了热烈讨论。

  以下为文字实录

  主持人:最后环节是我们圆桌讨论,我们也请五位嘉宾上台。首先邀请圆桌讨论主持人MongoDB中文社区创始人程显峰,杨志丰先生,丛磊,139的李祎,以及巨建华先生,我们交流主题大概是以围绕NoSQL这一块。

  主持人程显峰:我们讨论了一天大数据的问题,到晚上我们专门拿NoSQL单独作为一个话题进行讨论,大家可以看到在座四位嘉宾,其中有三个人都有自己的NoSQL。我想第一个问题,因为有很多人都在做NoSQL的选型,如果不用你们的NoSQL,你们推荐大家用什么样的NoSQL,怎么去选NoSQL,怎么根据自己的业务去选择合适的NoSQL?当然不可以推荐自己的。

  丛磊:我关注NoSQL还是比较多的,我觉得MongoDB,另外对于选型来讲首先看需求,可靠性到底要求怎么样,速度要求怎么样,这个东西要求准确判断然后再去进行选型。

  李祎:我是来自139移动微博的李祎,现在是架构师。在我们系统里面用到关系型数据库是我们自己搭建的,就是拿来做微博熟悉用户推荐,以及和人有关人的计算。为什么我们选了自己一个东西,而没有用其他人,我们也是基于自己业务需求来做的,现在市场上NoSQL很多,我们就基于自己推荐业务需求,要做自己的一个数据库。市面现在图形数据库有一些,其实都开发的不是特别完善,基于我们现有的技术,和现有的一些开源软件和一个大的数据库。

  杨志丰:我下午讲的时候已经提到,要看每一个特性,需求把很多都已经排除掉了。除此之外,大公司和小公司还不是很一样,很大公司在选的时候,除了你看到他的东西比别人多好之外,一旦出了问题有没有人帮你解决问题,这就是为什么很多大公司经常自己去做事情,我们现在都在用NoSQL,但是肯定有研发人员在里面,没有这方面的人才,可能你直接买一个,比如Oracle也有一个最新的解决方案,他给你更好的一个技术支持。

  主持人程显峰:也就是我们在考察NoSQL的时候也要考虑SQL是否强大,你自己是否能够完全掌控这一部分,还是需要外面的支持?

  杨志丰:这是一方面。

  巨建华:我没有自己数据库,不像在座几位。但是我有一个建议,如果我们采用NoSQL的数据库,最好能够特别在产品中,正式产品中使用,我建议大家能够有机会都看看,如果不想做很深入研究,也得很清楚存储结构,甚至各种数据文件处理方式,我建议最好能看看源代码,跑不起来能够有一定修复能力,特别NoSQL很重要,如果做不到会带来很大风险,有可能某一天重要数据丢掉之后找不回来,如果没有很好的备份方案。

  现在比较好,我现在目前使用MongoDB本身比较完善,可以放心使用。

  主持人程显峰:今天数据主题也是大数据,数据也有几个阶段,采集,处理,存储,呈现。我们发现之后存储跟处理部分结合越来越紧密了,比如Hadoop有存储专用的一块东西,而像MapReduce传统存储也有一定框架,大家对存储和处理结合越来越紧密,大家有自己的或者使用别人的,这个是不是方便,大家可以谈一下。

  丛磊:我觉得是这样,首先这个数据处理可能有两种需求,一种是用户大规模海量数据综合处理,还有用户在对于他自己数据像一个存储过程一样,对于单条,或者几条数据相对之间小规模处理,SAE这两块都有,其实NoSQL是具有天生亲近感。还有用户小规模数据,想插入数据的时候,取出数据的时候做什么计算,最好的载体就是GS,MongoDB是这么做的,GS是最好的一种通用语言,任何一个人写起GS来不会有太多问题,将来SAE,肯定会支持用户通过GS来实现存储互通的功能。

  李祎:其实我们这边用自己图形数据库原先也考虑过用Hadoop的方式,但是发现两个问题,一个是Hadoop数据结构和我们需要的关系型数据库,和我们需要对应关系那种不是特别匹配,我们要通过好几道手才能取出来进行计算,这样不太合适。另外我们也接触了,我们BI部门原来也用过Hadoop的方式,发现其实有一个问题,这个问题是一个故事,有一次他们机器宕机了Hadoop物理存储恢复不了,搞了半天,发现后来我们面临选型的问题,我就觉得我们无法真正去控制这个东西,就像刚才杨志丰所说的一样,无法真正控制这个东西的时候,最好还是选择一个最后能做最简单的东西进行控制,这也是我们为什么自己做图形数据库的一个原因。

  杨志丰:这个问题我刚才讲的时候已经提到的,我们OceanBase里面已经有了,需要进行嵌入,我们是要把计算移到数据上去,因为今天主题就是大数据,数据他大了,移动一下,从这个集群移到那边为了做计算再移过来,这个代价太大了,所以我们要把他和数据放到一起,这就是一致性的问题。另外我有一个趋势。

  巨建华:我选择MongoDB受整个脚本限制,在整个单模式下跑,整个集群在同一时间只能跑一个,在这上面跑比较受到局限。我结合这种模式,运动量比较大,经过相互拆分进行并行,说比较弱,能够满足业务需求,所以在这个过程中暂时还是能够通过自己写的分布式集成框架来解决问题。我看这方面很多跟刚才淘宝他们讲的是一样,很多时候根据实时业务场景来采取利用什么样的方法来解决问题。当然说如果真正,假设我们需要做索引,可能就需要结合形式来进行解决,而不是采用一种通用框架解决,很多时候通用框架必然比较低。

  杨志丰:这种NoSQL方案理解大部分在线实时查询方式,OceanBase功能,我白天做查询,现在即使Hadoop也很难找到一个很好的解决方案,因为你很难控制计算资源,对于实时应用,你要留足够大的余量来保持实时性。

  主持人程显峰:其实还是资源比较有限,很难控制?

  杨志丰:本身就是倒出去做离线计算。

  主持人程显峰:来参加大数据有很多还在考虑NoSQL,考量很多方案,大家拿不准一个问题,我什么时候该用NoSQL,什么时候该跳进这个池子里,或者我采取一些措施可以继续支撑再高一个层次,现在到了这个门槛上,我是继续来优化我现有系统,还是我研究一下新技术,尝试一下,有什么样的信号,你们在选NoSQL的时候是怎么来进行抉择的,到这个点了我们可以尝试了,还不到这个点,有没有什么关键的指标可以来说明这个问题?

  丛磊:对于选择NoSQL我建议不要盲目选择和跟风,我就以游戏公司为例。毕竟SAE有很多游戏公司,其实不管什么平台游戏公司是最赚钱的一种类型公司,但是游戏公司我所知道应用99%,我所了解到的只用MySQL和MC,大部分公司用这两个业务够,没有必要投入更大精力,当然也取决于个人对于技术追求,从业务角度来讲没有必要太多跟风。另外一个从选择来讲还是要看自己的需求,根据自己的领域来做这个选择。

  主持人程显峰:是不是感觉现在互联网公司更愿意赶潮流一些,有点过度一开什么马上就跟上,我们也就试一试?

  丛磊:我觉得稍微有点过,我个人觉得可能有点过。

  李祎:我就讲我们实际例子,我们为什么要做图形数据库,我们原来也是基于数据库用户关系,但是后面随着推荐逻辑越来越复杂,你发现去调用数据库的时候IO性能已经很低了。这时候又想到找我们BI,我们一调结果发现BI死掉了,我们就想自己做一个,因为我们做推荐,就需要一个图形数据库,我们就去找,找到一个正确路去做自己的一个图形数据库。

  刚才那个说是IT,互联网有点跟风过,我也比较保守赞成这个观点。我们想YDS(音译)特别火我们也想换,我们换了之后下午进行测试,发现效果非常好,内存消耗反而上去了,原来需要2个G就能存的数据,现在需要4个G,我们倒想换老板没钱,现在这个办公室最好,如果再换上去的话,很可能会出现一些各式各样的问题,所以还是选择一个比较稳妥的路子。其实IT公司,特别咱们互联网公司崇尚一些科技技术其实是好事,应该多普及,要不然的话就没有创新了,太保守。

  杨志丰:我觉得这个问题能不用的时候就尽量不用,基本上最后不得不用的都是需求推动,因为我了解这几年大公司,他们肯定是需求推动的,因为不得不这样做。你运维成百上千个,比如Mark Server,把运维尽量自由化,我听说也几千台组成Mark Server,如果你一个DB买比较好的,当前最好的硬件,肯定谁都不会找麻烦,当几百台,我们运维就是解决宕机,各种各样扩展性方面的问题。

  主持人程显峰:有现有尽量不要改变,还有另外一个层次能用别人就不要自己写一个,你们有三个人已经写了?

  杨志丰:你可以用,这个产品本身应该长成什么样大家都不一样。

  李祎:自己一个架构师这就是你的职责,不能大家说好够去用,出了问题还需要你负责。

  巨建华:我觉得现在都在崇尚敏捷开发,我们在做一个项目的时候,特别互联网实验性项目,我们可能更希望快速上线,上线之后能够快速改进。一个应用下来我觉得我自己都会很累,而我们采用类似于MongoDB面向文档存储的东西,本身就跟ORM结合非常好,不用写代码,如果我对某种MongoDB数据库用的比较熟觉得自己能够Hold住这个东西,即使项目组中其他人不一定会熟悉,毕竟开发很简单,从能够快速完成工作回家的角度我是支持用MySQL,确实能够提高开发效率,还有一个好处将来你的产品真的成长起来,成熟起来,你想做分布的时候会发现会省了很多时间。

  主持人程显峰:其实我们从两个,大家从两个不同角度去讲这个问题,最终都是你最终付出多少成本,前三位最关注数据库维护,他运维的一些成本,可能更关注开发上线这部分成本。把这两部分成本看看自己找一个非常好的平衡点来做这个事情。在这个公司采用NoSQL的时候,一定会去找一些NoSQL的技术人员,各位在从业过程中你们是如何评价一个NoSQL技术人员,应该具备什么素质?我们这个会开完之后会有无数人跳进这个圈子,他们到底跳进一个火盆,还是一个火坑,他需要具备什么样的素质,你就觉得这个东西,因为传统DBA是有标准的,基本上就哪些内容,现在NoSQL不一样了,大家都有不同看法,我们从建化那边开始。

  巨建华:我认为很多NoSQL产品对开发人员相对两说,我认为是比较简单的,只要这个开发人员能够了解比如一些数据的建模模式和原来不同,原来习惯性的如何表现数据模型。第二就是关于比较注重性能优化方面,如何能找出自己代码存在的问题。当然为了能够达到优化的能力,就需要深入理解这个数据库对查询的方式等都需要有深入理解,跟普通数据库都没有什么不同,包括IO,一整套架构都非常了解。当然我们也知道关系型数据库,很多人甚至写完之后知其然不知所以然也能够让程序上线,对于MySQL这种情况也可能存在,来保证这些东西不会出太大问题。

  一般来说,只要会使用,按照SQL一样能够熟悉,知道合理利用索引优化数据库,如何知道怎么把原来SQL模式,转发类似于文档模式的开发方式,就能够基于NoSQL数据开发。

  主持人程显峰:基本原理你知道索引怎么回事,带来什么样提升,要知道SQL技术好的话,学NoSQL也快?

  巨建华:可以这么理解。

  杨志丰:我的角度做NoSQL的人,有一个很著名去年Google有一个大牛,他在去年的时候有一个PPT在下面就讲了他做Google那些基础设施他的经验。比如其中有一条,你知道一个网络包从这到英国回来需要多长时间,一个存储体系结构,就是做系统的要求,你要知道一次内存访问多长时间,一次磁盘访问,一次Flash访问,自己要有一个概念,其实说白了要有做系统的感觉,你看到一个系统,你知道什么地方可能是瓶颈。

  另外一方面NoSQL系统都是分布式的系统,从我要招人的话,如果他有分布式系统方面,比如研究生就是学分布式系统,这方面是一个很大优势。比如你知道什么叫一致性,也是一个道理。

  李祎:我的感觉没有志丰那么高深,我们项目还是一个工程性质,我们招人的时候主要会用Java,只要你会Java,理解力比较好。刚才说的咱们怎么去评价一个人,会有一个附属特性,没有招一个专职人员去进行维护。我感觉现在如果从刚才致丰那个角度,我们开发人员的要求,也要懂一些底层怎么去建索引,因为我们自己用了很多索引的工业,还就Java基础比较好,理解力比较好,我们做的利用一些图形,数据上理论比较多,比如从我查认识奥巴马最短数据是什么,怎么去做,对这方面要求多一些。

  丛磊:好象一般IT互联网公司还没有招NoSQL的职位,更多项目是利用到NoSQL的知识。其实我的观点跟志丰差不多,首先这个人看他的需要,实际上NoSQL分成两层,一个是比较高一点,涉及到分布式一些理论,第一点也不是说这个低,不是层次低,更多涉及到本地存储的东西,很重要硬件,我觉得从传统硬件将来这个存储引擎一定会发生变化,包括Google最新出的一个,一定会有超越传统搜索引擎的数据库出现来代替以前的方法,从高层来讲基本上被亚马逊(微博),Google几家都包了,去学习理论的时候,大家一般提到理论就是CAP,可以划成两个放心,一个是扩展性,还有一个就是复制,从这方面更好理解一些。

  主持人程显峰:现在如果大家用NoSQL的话,可能大家已经讨论过整个开发成本相对风险要小一些,主要的成本,或者说他的风险可能体现在他的部署,和集成上面,部署这个问题,现在好的NoSQL解决相对好一些,还有自动化的水平扩展,包括分片,集群,热备这些都稍微好一点,我请大家谈一谈关于集成这块,他怎么与我们现有的业务结合起来。比如说有KVDB,他在这个过程中,我希望大家多谈一谈,因为你们都有实战经验,多谈一谈血泪教训,不能我们来了之后看到大家都是光鲜一面,你们把血泪都掩藏在自己内心深处,搞的没有彩头了。

  李祎:我做NoSQL的时候确实有很多血泪史,第一个版本出来的查询特别慢,跟踪一下原因,因为有些用户他大的用户关系的时候,因为我们前面是一个相当于有些大用户,比如你是赵薇,你有好几百万粉丝,这时候这个数据,一开始没做二级缓存,相当于赵薇数据每次有一个用户在查的时候,会来来回回倒腾好几次,那时候基本上那个系统不可用了,后面我们要进行分片,比如说大用户粉丝列表做了一些分片,分片之后,数量受到限制,比如前5千个,或者日期限制,今天的,做了这样一些限制之后,我们在算一些分组的时候效率就会更高一点,这也是我们用NoSQL的时候,经常会预见的一个问题,当你的对象很大的时候,你怎么去控制他,本来是想提高IO的,反而变成相反的了。

  丛磊:对于这块NoSQL和业务整合我从云计算的角度来说,怎么利用云计算整合。我这块只有一个经验,这个经验是从亚马逊来的,不要试图去改变用户的使用习惯,不要试图教用户这些东西,用户不会学,我所知道几乎90%以上 开发者他们对NoSQL很小,这应该有公有云自己的平台去解决。

  杨志丰:因为你做的还是一个NoSQL,我是一个底层系统,对上边开发人员当然接口最简单,所以从我们这边的角度来看,现在希望刚才那样一个系统打包称一个解决方案,比如现在一个很火的接口我们就可以进行打包,让上手容易一些。另外从经验的角度来看,负载均衡比较重要,刚才说双十一的时候,我们最开始遇到的问题有一个地方,要做负载均衡,只要算法上有问题,就会把一些问题变成热点,你上面应用是什么样子的,需要你上面负载均衡不一样的。

  主持人程显峰:高度运营相关的?

  杨志丰:对,策略是不一样的。另外第三个,我是在一个公司内部做底层系统的,别人是做底层系统上边的应用系统,我们经验就是说,我们是帮着他们一起去做,比如说我们会从开发人员里面挑几个人和应用的人坐在一起,我就是来帮助你一起做,在系统开发初期,因为你的系统,刚开始的时候可运维性很差,可能有各种各样的稳定性问题,这样的问题你直接暴露给用户的话,他们是解决不了的。另外你可能由于你接口涉及很烂,别人用起来很烦琐,总是在不断在发展,初期的时候据我所知Google他们最早那套平台他们也是手把手去教应用,这个查询应该怎么去做,那个查询应该怎么去做,不应该写那样一个语句在里面,这样就把服务争取服务好。

  主持人程显峰:还有强烈支持在后面,如果有这个品牌以后,还需要给客户强烈的支持?

  杨志丰:对,我觉得那个MySQL接口就很好,很清楚,不容易用错,但像一个数据库的东西,如果你的SQL,因为SQL的表达能力太强了,很容易就弄错了。

  主持人程显峰:如果一个东西很灵活,写的又很烂的话,客服人员一定挺忙的。

  巨建华:刚才谈的这个主题是血泪史,如果想避免血泪史最好选择稳定的产品,我们一开始在选择1.4的产品遇到很多问题。比如说,当时一个表,一个集合,当时你可以用任意的名字去创建,如果你用一个大写的名字建立一个集合之后,打算再建立一个小写的名称直接退出也不会出现错误,在这种情况下很神奇,可能有人在写程序的时候没有把大小写注意到,跑了一段时间程序崩溃了,我们甚至想看都看不到。很久之后我们找到那个问题,把相应的bug去官网上做一些问题,很快就修复了,如果在正式运行的系统上发生这样问题,你会很痛苦的。

  因为我们一开始用在不是很关键的产品上,DBI对这个也很不熟不是太关注。当有一天我们发现我们广告点击顶过来的日志特别多,发现已经把虚拟内存耗掉非常多,我们打算增加节点,基本上没有办法把那个很安全的进行平衡转移。最后解决方案,我们把那个议程慢慢移数据,当然在新版本里面已经有很好解决。如果想避免血泪史的话,还是原来我在PPT上讲的,一定要放在产品服务器之前,先做一些实际使用,在应用过程中去感受,我觉得这样来逐步适应,而不是一下子上来之后,很贸然把一个项目放到一个不成熟的产品上去,这是逐步适应,可能会避免很多血泪史。

  主持人程显峰:大家有各种各样避免血泪史的方法,关于NoSQL实施部署,以及集成方面。很多人会问一个问题,现在云计算这么火,我自己为什么还要自己弄一个NoSQL,这样的服务可不可以用,比如国内盛大提出这样服务,他做了一个多足环境你可以自由来用,我想问丛磊,你作为一个PASS平台,很多人在你这做了应用,他可能想从别的地方做一个,从你这个角度来讲,会不会建议你这个PASS平台有集成第三方的应用?

  丛磊:这块集成,只要用户有需求我们都会尽量满足,只要不是太离谱都会去满足。像现在有很多游戏开发商,因为游戏是盈利的,所以我们把游戏开发商需求也是提到前面的,游戏开发商肯定会有很多需求,他就不想改代码,KVDB也可以做,他一点都不想改,我们也尽量去满足他。我们这时候解决方案,我们也在做IS平台,就像盛大这种做法可以进行租赁,这种东西我们还是鼓励他去用的,毕竟这是用户需求,关键还在隔离性,如果用IS,像这种产品隔离性还是比较容易保证的,因为我通过网络层,还是通过虚拟化的技术都可以来保证。

  另外从其他方面我们也欢迎这种服务商来接入到我们PASS平台里面,比如说你是一个数据,你开发一个数据存储服务,我们也欢迎他进入,我们正在推服务商店,你就到SE上面,SE帮你做统计计费,帮你收钱盈利。

  主持人程显峰:这点可能是国外做的比较好一些,你可以买各种各样的服务,也可以月付费。另外我也想问,淘宝数据量有点大,你们两个数据没有淘宝这么大,会不会选择把这个数据存在别的人维护服务上?志丰先不答这个问题,他放在别人那倒都倒不过去?

  李祎:这个问题不是我擅长的,那天收到议题的时候还特意百度了一下什么是PASS平台,我不擅长这个,回答不了这个问题,还是叫志丰回答吧。

  主持人程显峰:我根本就不维护了,你不是说要快,尽量见效果,我自己维护还得部署,还得集成,这个也等不及了,我就直接买一个服务,比如买盛大他一套MongoDB服务就直接用了,这个几乎是零等待吗,如果以后还有这样的服务,我们会不会去用这样的东西?

  巨建华:我觉得可能主要原因是现在国内的网络经过太糟糕了,即使在北京两个不同机房之间网速都很惨,如果网络能达到机房跟机房之间相聚,成本还可以的话是可以考虑的,目前还达不到。

  主持人程显峰:这就属于发改委反垄断的问题了。

  丛磊:说到垄断就想多说两句,大家可以看一下硅谷的创业,很多小公司创业都是靠亚马逊起来的。所以,我特别希望国内有这种环境,不管说是不是SAE,对中小型创业公司都是一个好事。但是,国内环境目前几家大的,包括我们新浪,我也自我批评,垄断型思维还在作祟,比如用淘宝开放平台不允许使SAE,必须用淘宝的机器,像这种条款要发生在美国是不存在的,但是在中国这种环境下,我还是希望更高层次领导人他们能够听到这样的声音,共同来把中国互联网环境做好。

  主持人程显峰:你那边实在挪不出去了,你们以后做成一个第三方服务,你们来用,第三方维护,虽然你们排放这个平台,大家还需要部署集成,能不能直接,你们做第三方的服务,直接整合呢,有没有这样的想法?

  杨志丰:我所了解的,比如说这边,因为淘宝CDN做的很好,是一个服务,也许以后会对外提供服务。我们这快现在对内需求都满足不了,还没到那个阶段,你做东西的时候总是想说,做一个东西,别人和你做的一样,就一定要PK出个胜负来,我现在这种心理不一定是对的。因为一方面你的产品本身有没有竞争力取决于你的服务,所以你一旦对外推出了,你要能够,第一我们很多用服务的人,国内很多喜欢免费的服务,比如你是一个严肃创业者,我们需要签了合同,出了问题你要赔偿我,这样我才知道你的东西是可靠的,你的产品,如果你是免费的,如果你是免费我就不放心,说到底不是要卖一个产品,而是产品加服务这样一个公司概念。

  主持人程显峰:今天大家对NoSQL发表了各自的见解,我们最后每位用一句话送给即将要用NoSQL开发者,把最诚挚的忠告告诉大家。

  巨建华:我代表NoSQL世界欢迎大家加入。

  杨志丰:我觉得NoSQL并不可怕,根据我们的话题好象有点妖魔化NoSQL。

  李祎:咱们程序员第九期关于我们图形数据库一个标题,NoSQL还在路上。

  丛磊:对于SAE开发者来讲NoSQL是不错选择,对于非SAE开发者NoSQL要谨慎选择。

  主持人程显峰:我们也会听取各位忠告,也非常感谢大家进行的圆桌分享,谢谢大家。

  主持人:谢谢大家,今天大家聊的很尽兴,最后聊到垄断问题,谢谢大家,到此结束。