说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

【先锋】事务、高性能,王涛谈打造超越MongoDB的NoSQL

HTML文档下载 WORD文档下载 PDF文档下载
兼顾事务和性能,并通过连接器实现复杂的SQL,NoSQL数据库SequoiaDB有着很多让人眼前一亮的特性。同时,SequoiaDB还能替代HDFS,作为MapReduce任务的数据存储源。

多样性、大容量给数据的存储和处理带来了巨大的挑战,当传统关系型数据库无法应对应用程序的快速迭代时,天生具备弱数据结构模式、易扩展等特性的NoSQL数据库得以飞速发展,在众多网络及新型应用程序中得以部署。然而,基于其分布式的特性,事务成为了大部分NoSQL数据库系统的致命弱项,也造就了NoSQL与任务关键性场景绝缘的这个现状。时至今日,着眼NoSQL领域,如何才能在高性能下兼顾事务以及更多功能已成为当务之急。为此,笔者近日与SequoiaDB创始人兼CTO王涛取得联系,就NoSQL打造进行了简要采访。同时,值得高兴的是,通过王涛得知,SequoiaDB即将开源。

以下为采访实录:


SequoiaDB创始人兼CTO 王涛

CSDN:请介绍你个人和SequoiaDB。

王涛:大家好,我叫王涛,现在是SequoiaDB的创始人兼CTO。之前我一直在IBM的北美数据库实验室做DB2数据库引擎。我们SequoiaDB是2012年正式成立的,每一行代码都是我们从零打造,并没有基于其他的开源数据库引擎。还记得当初我回国之前,大概用了半年的时间和几个IBM出来的兄弟在北美那边一行行地扣代码,最后整个引擎跑通了并且感觉性能不错,才回国成立的公司。我们SequoiaDB的核心产品就是一款文档类NoSQL数据库,从体系结构与应用场景上看和 MongoDB有些类似,因此很多时候我们会被拿出来和MongoDB作比较。

CSDN:你经历多年RDBMS与NoSQL的开发,是否可以从你的角度谈谈NoSQL运动?

王涛:我认为,NoSQL运动是现在应用程序互联网化和移动化的一个产物。过去,关系型数据库做点什么东西都需要进行复杂的数据模型设计和调整,但是在互联网时代这种玩法已经跟不上节奏了。所以,以互联网的标准数据格式JSON进行对象型数据存储成为一种需求,而这种需求同时也弱化了应用程序对关系模型的依赖。

当然,这并不是说NoSQL会在近期完全取代关系型数据库,而是这两者会有一个长期的共存,分别适用于不同的应用领域。现在我们已经看到,很多传统的企业也都开始慢慢接受互联网的思想,包括其业务模式以及后台所采用的技术,包括NoSQL数据库。

CSDN: 能否谈一下SequoiaDB当下都有哪些重量级的用户?数据库的规模达到什么级别?

王涛:我们现在在企业和互联网领域都有不少的成功案例。传统企业中包括像民生银行、海南航空、电信移动企业等;而互联网行业里面也有像蓝汛、蓝港在线这类企业。我们部署在一些客户的系统还是挺大的,比如有一家客户的日志分析集群系统总量超过PB,每天会产生近10TB的数据,都要近实时入库并且做到同时批处理分析和实时检索。这类集群都是百台节点的规模。

CSDN:同为文档类型NoSQL,对比全球排名第五的MongoDB,SequoiaDB的优势/特点是什么?

王涛:从架构上来讲,MongoDB和我们都是使用分片Sharding机制,每个分片里面做数据的复制和同步。而在具体实现中我们则有很大差异。譬如说我们的日志使用的是日志序列号LSN机制,而MongoDB则是一个capped collection,所以我们可以做到很多MongoDB根本不可能做到的事情,例如事务这类操作。除了这些功能点以外呢,我们的性能可以说是一大亮点。过去人们通过MongoDB和CouchDB可能都认为文档类NoSQL的性能比较差,至少和Cassandra这类的宽表库比起来差。但是现在在我们的测评中,很多原本HBase和Cassandra最突出的导入操作都被我们甩在了后面。

CSDN:确实,一般人都认为文档类数据库由于结构复杂,相比起宽表和KV类型的NoSQL来说性能不佳。为什么SequoiaDB在能够提供丰富的数据库操作功能以外还达到这么高的性能呢?

王涛:这个问题就要深入到代码的实现中去了。我想这都要归功于我们代码的精细化设计,尤其是对并发性和锁的这一部分。

在一个并行处理的数据库里面,如果锁控制得不好,会造成很多线程都堵在一个地方。如果大家有兴趣看看mongodb的代码可能会发现,它做了很多非常好的模块化封装,但是相反地对于一些锁的处理则比较粗糙,所以在高并发高压力的情况下总体的吞吐量根本上不去。而我们在设计SequoiaDB的时候,很多代码尽量做到无锁。程序的设计永远秉承一个理念,就是在正常流程下尽可能无锁,异常流程可以使用额外的代码或锁机制保证逻辑正确。所以即使在一个16核、32核的这种大机器下起高压力并发我们也可以把CPU打满,不会在某些代码上造成性能瓶颈。

另一方面,MongoDB实际上很多设计并非最优。譬如说它的日志机制使用了capped collection。可能咋一听起来很新潮很酷,但是实际上会对整体性能有着重大的损害。而我们使用的虽然是比较经典的日志LSN机制,但是正因为这种机制被所有关系型数据库使用了几十年,才从性能和功能上都被完善到了极致。

剩下的还有很多优化细节,譬如说我们在性能敏感的代码里面完全不允许使用string这种STL库,就是避免这种封装得比较深的库会做额外的譬如分配释放内存的操作,造成不必要的损耗。

CSDN:我们知道,分布式数据库和传统的单点数据库相比有很大不同。从技术上能不能简单介绍一下,分布式数据库的难点在什么地方?你们是怎样解决的?

王涛:传统的关系型数据库主要都是单点架构,有数的几个像Greenplum和DB2这种MPP 数据库才能够做到分布式架构。当然,我们说Oracle的RAC算是假的分布式,在存储层还是大统一。所以,我们这里说的分布式是Share Nothing的MPP架构。

在分布式系统里面,有几点是需要注意的。第一,就是数据是否可以做到弹性扩张。这个可能算是所有MPP分布式关系型数据库最大的弱点之一。比如DB2,想要添加个节点,需要做redistribution,遇到一个几十TB的数据库估计要好几天才能搞完。而NoSQL明显不能这么玩,所以我们用的是一致性哈希技术,把数据散列后映射到哈希环上根据范围划分节点,可以做到在增减节点时移动最少的数据。

第二,节点的可用性。现在讲究的大集群基本都是围绕着PC服务器说的,PC服务器的特点众所周知,就是容易坏。那么如果我一个集群里面有1000个节点,三天两头都有可能有机器出故障。如果用关系型数据库那种MPP架构就完蛋了,一个节点坏了可能整个表都挂了。所以,我们要用多数据副本的方式保证即使机器挂了,数据也可以在其他的节点中找到。

第三,就是事务操作。我想事务操作是现在很多NoSQL都不具备的功能。并不是说NoSQL的架构和事务有冲突,而是想要实现事务机制需要太多模块的配合。譬如说日志机制,对于MongoDB的capped collection机制就很难实现事务的提交和回滚功能。我们用的是基于传统的事务日志的机制才能够做到这一点。当然,别忘了还有记录锁、表锁这些机制,还要考虑多副本之间数据根据日志的分发同步,节点失效重新选举后日志的同步等一系列机制。

CSDN:事务一直是分布式数据库实现的难点,就算很多其他世界知名的NoSQL也没有很好地实现。可否详细介绍一下其中存在的挑战,以及SequoiaDB事务的实现途径。

王涛:事务本身其实原理并不难,就是做任何操作都要先写日志,然后把每个会话的日志都有一个链能够往回一条条找到本事务起始的位置,能够对每一个操作做redo和undo就可以了。这个是单点传统数据库的玩法。当然,锁这些机制是另一个故事了,这里先不提。

但是在分布式环境中,这个简单的东西就开始变复杂了。第一,如何确保在可配置的强一致与最终一致性中,事务在复制过程中的完整性。譬如说,主节点A挂了,备节点还没有同步到这个主节点最后的日志,这个时候事务怎么处理?对于我们来说,当然在最终一致性的配置中只能牺牲数据的完整性了,不过在强一致性开启的情况下则是必须要保证这一点。

另外,多个分片之间数据完整性的问题也存在。我们利用很多MPP数据库使用的二段提交(2PC)来玩,可以满足大部分提交回滚的需求。但是如果在二段提交过程中的小窗口处发生问题同样还会造成indoubt transaction,这一块处理也是难点。

还有很多网络问题的检测也和事务息息相关。比如说如果协调节点挂掉了,需要让数据节点能够立刻感知到这个事件,并且确保这个协调节点所属的事务全部进行回滚操作。而如果某一个数据节点掉了,协调节点则必须感知然后通知其他数据节点回滚这个操作。

CSDN:我们看到SequoiaDB提供不少与第三方产品的连接器,能不能介绍一下这些连接器的作用?

王涛:做一个数据库不像搞一个游戏或者应用软件,自己和自己玩就行了。数据库是软件项目基础架构的一部分,需要对接很多第三方的应用和产品,要把生态圈建立起来嘛。所以我们在和其他产品对接这一块也花了不少力气。主要是两个大方向,一个是和Hadoop这块一起玩,一个是和使用关系型数据库的应用这块一起玩。和Hadoop对接相对比较简单,就是Java里串行化的几个函数嘛,对接了以后自然和Spark的对接也有了。另外对于Hadoop生态圈里面其他的Hive和Storm我们也都做了连接器,可以直接利用Hive和Storm从数据库读写数据。

而和使用关系型数据库的应用对接就有点麻烦了。我们想了个方法,先和PostgreSQL对接。PG不是提供一个FDW的机制么,我们就直接写了个库能够串到FDW上,让PG能够定义基于SequoiaDB的外部表,里面定义各个字段和类型。每次查询的时候相关的请求会通过FDW转换成我们认识的东西发送的数据库上,然后返回的记录在格式化成PG需要的格式,在PG里面进行关联啊聚集之类的。

总地来说,我们会不断增强连接器的种类和功能,争取今后和多数主流的产品与第三方应用都能够较轻易地对接。

CSDN:SequoiaDB曾宣布提供开源版本,是否取得了一定的进展,对比商业版,开源版本会弱化哪些方面?

王涛:开源现在是万事俱备,就差最后临门一脚了。我们已经在Github和CSDN CODE平台上都建立好了repository,所有的代码审查和协议注释也都已经完成了。我们将很快在近期就会正式对外开源。

商业版和社区版相比,主要是在企业级服务这块增加了一些内容。譬如说24x7的技术支持啦,定期巡检啦,安全机制啦,还有一些额外的监控机制和工具软件之类的。而从数据库内核的代码上来看企业版和社区版基本区别不大,也并不存在集群规模限制等问题。

CSDN:作为数据库打造的行家,有什么使用经验可以分享给读者的?

王涛:太多经验也谈不上,现在我看到不少程序员和DBA兄弟依然围绕着关系型数据库吃饭,我想大家可以开始适当关注大数据和NoSQL这个领域。因为我觉得今后关系型数据库会成为一个存量市场,就像几十年前的大型机一样不会消亡,但是也不会近期迎来大规模的增长。相反,非关系型数据库与大数据技术正在开始起步,虽然市场上还是一片混战局势未明,但这也正是切入这个领域开始学习的好机会。如果局势都明朗了,基本该占的坑都被占完了,晚来的弟兄们也没啥汤好喝。

CSDN:你有什么需要对读者补充的么?

王涛:作为咱们国内不多的基础数据库软件,我们有信心在开源后和国外的产品进行功能与性能方面的正面抗衡。也希望国内的技术人员圈子多多给我们鼓励,最好能试用一下提出各自的宝贵意见。

中国创新“先锋”企业系列报道
序号 公司名称 成立时间 CEO/CTO 官方微博 公司产品/方向
1. 云适配 2012年 陈本峰
网站适配
2. 友友 2010年 
姚宏宇
@友友微博 C、C++、Java产品研发 
3. 聚合数据
2010年
左磊 
@聚合数据 移动数据服务
4. Anchora 2009年 鲁为民       

MoPaaS和InPaaS 
5. 够快 2012年
蒋烁淼 @够快科技 
云存储
6. 文思海辉
2012年 吴凯
@文思海辉 OpenStack公有云       
7. 搜狐云 2011年 邱英波
SendCloud                  
8. 联想云存储 2009年 罗予晋
云存储
9. 南京讯之智 2012年 谢晚霞
大数据实时分析
10. 上海圣何赛 2012年 
金剑 

云管理、云存储                
11. 国云科技 
2010年
季统凯
@国云科技 云操作系统                
12. SSO365 2012年 赵健                

云安全、云身份认证 
13. ClouDil云方案 2001年
叶滨 @世纪鼎利 
通信运营商                
14. 多备份 
2013年 胡茂华            
@木浪 云备份                 
15. 上海越诚软件 2011年 王炜                  
基于云的建站软件超市 
16. 云智慧 2009年 殷晋 @监控宝 云监控、基于大数据APM
17. 深圳泽云 2012年 何巨彬
高性能存储系统
18. 深圳智冠 2004年 卢慧莉  
手静脉生物识别、虚拟化
19. 北京沃安科技 2009年 曹学武 @沃安科技 移动视频技术提供商
20. 星环信息科技 2013年 孙元浩 @星环科技 大数据分析平台
21. 杭州数云 2011年 宣晓华 @杭州数云 数据挖掘
22. 红象云腾
2012年 童小军 @RedHadoop
基于Hadoop的大数据平台
23. APICloud 2013年 邹达 @APICloud 云API和端API
24. SequoiaDB
2012年 王涛 @SequoiaDB
大数据、云计算、NoSQL
备注:2014年9月16日更新,持续更新中......


备注:云先锋系列文章是由CSDN云计算频道打造的,主要报道国内外在云计算、大数据方面具有独特竞争优势的企业,以传播技术为目的,推动中国云计算技术的发展,只有你有云计算或大数据方面独特的技术、产品和服务,你就可以投稿,欢迎投稿weiwei@csdn.net。

VB如何在VB和Delphi中快速实现立体化窗口显示 VB如何在VB中实现绘图区的大十字光标 VB如何在VB中制作不回显的文本框 VB如何制作浮动式窗口 闪烁的Label-VB资料 设定StatusBar的文字成不同的颜色-VB资料 设计一个可中断循环的按钮-VB资料 设置“执行无用户界面”-VB资料 生成一个透明窗体 -VB资料 实现窗体内部的左右移动 -VB资料 实现鼠标移到窗口上时变大,移出窗体时变小(如《东方快车》)-VB资料 实现图片平铺于窗体中-VB资料 使程序的标题条闪烁 -VB资料 使窗口总在最前 -VB资料 使窗体右上角的X按钮失效 -VB资料 VB使用 WIN95 的选择目录对话框 使指定窗口总处于其他窗口之上 -VB资料 通用对话框专辑(全) -VB资料 透明的Form上显示背景透通图 -VB资料 图像在图片框中的滚动 -VB资料 拖动无标题窗口-VB资料 拖动无系统标准标题栏的窗口-VB资料 文本框中光标位置的获得-VB资料 无关联程序时开启“打开方式”窗口 -VB资料 显示 Combo 的下拉条 -VB资料 显示Windows系统的标准ABOUT窗口-VB资料 显示程序的版本 -VB资料 显示窗口的水平和垂直滚动条-VB资料 一劳永逸让VB自动改变控件大小 移动没有标题栏的窗口 -VB资料 隐藏Win95任务栏 -VB资料 dbgrid焦点问题。 如何识别客户端浏览器是不是腾讯浏览器? 怎么样得到上个月最后一天的天数 关于图片显示的问题? 一个应该很简单的问题!散分了! sybase12安装后sybase server启动不起来,服务启动没有问题 请问oracle JDBC 中classes12.jar、classes12_g.jar、classes12dms.jar这三者有什么区别? ( 召唤HTML编辑控件(ActiveX) 为什么没有遍历所有文件和目录?哪位可以帮忙调试一下。 请问如何再java里面执行oracle数据库指令如;exp,imp等等 高分求助!关于触发器。来者有分!在线等待! 工作累了﹖沒有精神﹖來我這里喝一杯吧﹐ Ghost2001如何备份win2000系统 工作累了﹖沒有精神﹖來我這里喝一杯吧 关于图像缩放求援? 各位老大!有没有用C#写的浏览器的程序? 请问如何再java里面执行oracle数据库指令如;exp,imp等等 C#调用C++写的动态链接库中函数的问题! dns的转发项是灰色,说是根服务器,怎么办? 求助!如何实现鼠标移动Image控件 无法终止程序, 条件判断出问题 ,奇怪 为什么对象释放出错? 在FormDestroy中释放对象时出现 'Invalid pointer operation'的错误。 MDI子窗体在MDI父窗体内不能显示的问题,希望高手指点!!! 小问题,高手行!!! JSP 关于中文乱码 哪位高手请提供下面题目的源代码, 急!!! 【求助】DELPHI中ADO连接DBF库超过256K就显示不出数据? 菜鸟问题 asp调用WORD的问题 安装oracle8.0.5时的小问题 Win2k & WinXP 桌面全空 弱问题,关于SIZEOF 服务器生成的图片发到客户端打印效果不理想,如何解决? IIS的站点一启动就会占用所有IP。如何解决? 如何连接两个数据源 cisco3550交换机如何配置? 快狗里的 conn.asp ,,有一个问题,谢谢大家~!!! 如何用javascript实现字号缩放? 紧急 在线等待 有趣的问题 小弟刚涉及socket不久,望大哥们指点。 主板又无法启动了◎! 关于dataset数据集的问题,请教???? 急呀,快来帮帮我呀! 高分求救网络传数据问题 分不够可以在加 在线等待 急 关于非MDI的非主窗体的最小化问题 工作累了﹖沒有心情﹖來我里喝一杯吧 大家一起来研究下这个问题~~ 如何查询两个时间之间的记录? ASP中不能显示word文档(存于BLOB字段),救命啊! 如何设置窗体为必须响应的模式 金牌杀手的传说 一道英语改句子的题目!On their way to school,they saw a nice watch on the street corner.(保持句意相同)a nice watch on the street corner _______ their _______on their way to school.我填的答案是“caught ,eyes”,答案上写 1.where none(它是什么词性与意思,用NO代替可以吗?) intrudes(它是什么词性与意思)2.i love not man(为什么不用a man?) the less,but nature more.有什么语法词组? His bag is made of (leather).对括号内提问____ his bag ____ ____ 英语改同一句子一题 She said" I'm not French man ,___I don't love PairsA.and B.but C.or为什么? 请问是the bag is made by leather还是made of leather? 分析一下can may must could might could have分析一下can may must could might could have done might have done等 I am not a smart man,but I know what is love.哪位人士精通英语,请加我好友,980559451 创建文明城市中学生怎样做英语作文 can,must,have to,should,may,could,might有语态上有什么区别,怎么区别比如1.___I park my bike here.2.____pass the book to me.3.He____at home.在表示语态的时候, 我爱的男人 THE MAN I LOVE怎么样 有关会计的英语翻译,就一句话,谢谢各位大侠We are not convinced that diverting already stretched resources at the Board to complete issuance of the proposal at this time, and asking preparers to implement it, is merited. 用have,has,there is,there are填空 改句子(英语题目)1:We have a class meeting once a week .对划线句提问--once week2:I get up early in the morning in the past .改为同义句3:He has been there for two weeks .改为同义句4:My classmated have already gone to the mu It made me kind of angry to wait for him改为同义句 I wait for you中I是主语,wait是谓语动词,而且是不及物动词,那宾语是for you还是you? He spent 1000 dollars on the house at the end of the street.(同义句)The house at the end of the street _____ ____ 1000 dollars. this thing made me angry"angry"在句中充当的成分 ( )A:Do you like talking with your friends on the phone .B:_____ .I enjoy using MSN .A .Either B .NeitherC .Both D .None 谁能翻译一下 Darling,I will be sincere to love you If to love and to be loved is fair,then I say I love you,you will also say you love me! 把People use the word friend freely翻译成中意思 预定旅馆的英语想把这几句话翻成英语我在通过venere您那里预定了一个三人间,2月25号入住,26号离开.另外我需要带什么凭证吗? 急,If you also love me,you will not be so indifferent to me.是什么意思.? 第三人称后面接的动词形式就是第三人称单数形式 举例 love you also will be I to believe that you will also understand me to your love . i'm yours lrc 歌词要放在MP3上的,时间一定要准! 预定饭店 英文 谁帮我用英文写一份预定饭店的文章 不限制多少单词只要把预定饭店的过程写清楚就好 我明天用急 since前用什么时态,后用什么时态 英语主动句改被动句 ,被动句改主动句主动句改被动句people can judge beauty differentlythe postman will deliver the package tomorrow morning被动改成主动tickets can be purchased by customers at the ticket counterall phone call 我已经预定好酒店的英文怎么说 如何用英语打电话预约火车票和旅馆 英语被动句改成主动句1.When is the sports meeting held in your school?2.The boy hasn't been seen to dance yet since前后该用什么时态啊? during over since for的用法和时态 英语中主动句改被动句,求例子,是怎么个方法 预订和宾馆的英语 since表示自从后面除了接一般过去时还可以接什么时态 热烈欢迎芬兰豪格佛斯专家莅临指导翻译英文, 英语主动句改被动句Someone had sent Jack to the hospital before the ambulance came. Is there any problems和are there any problems--那句话是正确的?我当然知道是Is there any problems正确,但是很多年过去了,好像英语水平到了瓶颈期!今天早上和外国同事交流的时候,说出这个句子,感觉好别 since people are fond of humor,it is as welcome in conversation as _ else.A.anything B.something C.anywhere D.somewhere选项加解释 英语被动句改主动句主动改被动,被动该主动1.A mistake was made in using too much passive voice2.UFOs were reported by faemers who had seen atrange sights.3.The game was won when a touchdown was scored by the quarterback.4.We were dren is there any 或 are there any感觉差不多?口语中好像没听见过are there any 全部都是is there any 用的,就是想搞清楚一下,比方说 is there any coach in this gym?or are the any coaches in this gym?如果想提问是否有 coach I have nothing to tell you中的to tell you是不是定语? 下列形容词比较级large,beautiful,heavy,interesting,quick,small,wide,happy,few neither of 后面加单数还是复数 It is fifty-four years since the People's Republic of China______A.founded B.was founded C.has founded D.has been founded答案应该是A,为什么?请说明原因, 《祖国啊,我亲爱的祖国》寒~我是干瘪的稻穗,( ).我是失修的路基,( ).我是你挂着眼泪的笑涡,( ).我是你雪被下古莲的胚芽,( ).我是新刷出的雪白的起跑线,( ). is there any milk 还是are there any milk它们有什么区别呢? 化学科普小文章500字左右 麻烦翻译一下Are many of you good at computer games 根据上下文用Is there a ...或Are there any...造句(例子)A:I need a haircut."Is there a barber shop"near here?B:Yes,there's one Elm Street.(1)A:I want to send an e-mail.__________________near here?B:No,there aren't,but there are some near t have\has\there is\are怎样区别,举例 是不是只有第三人称单数动词才发生变化如果不是那一般疑问句中是Does everyone 还是Do everyone Either of **和 neither of **是单数还是复数? 用 have has there is there are 作文:描述自己的卧室 根据情景填写古诗文,名句和歇后语1.语文老师正在检查作业,可是我昨晚为了看电视没有做,这时我在座位上是“( )”(填歇后语)2.我们的老师指导我们写作时,常常引用宋代著名诗人苏轼 This purse is made of a leather 语病在哪
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘