彭旸:我跟大家简单的介绍一下,现在上海的巨杉和广州巨杉到底是什么样的数据库。巨杉数据库成立于2011年,我们的创始团队开发的源泉原来是来自于核心开发组的,2011年团队组成回国开始打造一个基于中国自主研发的产品,这个产品我们现在是有融资,也获得了奖项,比如全球创新的一百家数据库企业,我们获得了中国创新的五十强等等,有兴趣可以去我们的网站看一下。这个我们还算比较自豪,是2016年我们大数据整个世界图谱中我们巨杉数据库是唯一一个中国自主研发的数据库,我们的位置是在我们左上角,就是我的上面可以看到就是 SequoiaDB。
我们目前主要的客户是金融、政府等客户为主,我们不是一个纯开源的软件商业化,主体来说还是因为我们在广州深圳的团队自主研发为主。我现在讲一下我们巨杉Sequoia的特点,我们是一个标准的MTP五,就是Share-Nothing的结构,每一个节点CPU、内存全都有一套来处理,本身我们支持一组多重的结构,我们一般来说从MTP的标准来说一组两重节点就够了,总共三副本的备份,如果你有多中心、两地三活等等各种业务的需求甚至可以是一台多重,我们基本测试可以支持一台带七个重,就是七副本的概念。FTP的角度来说大的优定就是水平的扩展,弹性的增长,我们系统可以支持BP级的数据库,支持上千台数据库集群,但是我们起步极端你可以用三台机器一个结点就可以开始,在我们的管理界面很容易的进行配置,就可以横向的进行扩展,完全是对一个开发者来说是半透明或者透明的,你不用太关心它是怎么增长的,晚上怎么做数据迁移全部自动化的,所以我等会儿简单的介绍我们数据库里到底有一些什么样的特征,从我们这个图里面我们可以看到我们有三个节点,第一个是协调节点,协调节点就好象大家在用命令行开始发请求,其实协调节点是处理所有的请求的,每一个对API的接口的请求都是用协调节点完成的,你看到右上角的节点有点像原数据,是存储整个分布式架构的分布状况,比方有多少组,多少重,多少个节点等等,包括每一个碎片定义等等,所有的原数据和配置都是在这个节点,真正的数据全部放在了数据节点。
第一个特征为什么叫MTP,我们主要是一致性和高可用,我们做数据都知道CAP的概念,当然在不同的业务场景你有的时候需要性能,有的时候我发现我的一致性要求更高,那你怎么保障?我们数数据中一组两重可以定义配置,你可以要求强一致性或者弱一致性,我们要求组节点写完以后就会自动的同步到各个节点,我们要强一致性,比如我要保证我所有的结点全部写完整了以后再回来也可以,这种做法就相当于概念上像我们说做磁盘的概念,所以根据你业务的场景你可以选择我是要强一致性还是弱一致性。还有一个特点,我们要很多做人为的处理来做区分读写分离,我们讲了巨杉的特征,因为多重节点,每个节点有三副本,所以,没有个父本你可以选择做工作我们第一个要求主节点是要写入为主,剩下的如果你优良重节点,你可以按这个案例来进行区分,比如这一组单独组织起来,我可以做实时查询进行高并发的,或者我把另外一个重节点组合起来,我来做批量分析,巨杉数据库本身是支持Spack,是四个发行商之一,待会儿我们讲两个概念是怎么来用的。这一个很大的好处就是当你用空间换取了性能以后,你的空间其实没有被浪费,你的空间可以根据你的业务的场景来选择我是来准备做实时高并发的查询。巨杉我可以稍微简单的介绍一下这个数据库的特征就是在批量写批量读和高并发的情况下,不管你是多少百T的数据还是多少DP的数据做二级的查询是它大的优势。
接下来我讲一个多维分区的概念,芒果数据库你用过都知道我们传统数据库有一个概念,因为你的数据库不可能一个放太多太多,所以一般来说分布式要求把数据库拆分在多台库中,我们巨杉支持每一个节点每一个服务器都支持二级索引,都放在内存中,所以对内存的要求比较大,当你做了二级索引以后,我们的任务就会非常快,能够很快的定义到我在每个分偏重怎么来实行我的任务,最后在我们的节点做一个合并的操作,返回给数据,第二个情况是我们在做水平分区,大家知道刚才我讲水平分区主要的责任是保证数据的均衡,数据的分布,水平分区的时候有两种情况,第一种我并没有业务的概念,没有业务的属性,只是想水平保证性能而已,那一般来说跟芒果很像,我有一个IB的对象,自动的来评分,这种情况的好处是我的数据库在多个节点中是绝对均匀的,一定是非常的均衡,但缺点是什么?就是它没有一个业务场景,我不知道是通过哪个K来查询,但是同样的道理,我在水平切分的时候,我可以定义一个所以P或者多个所以P做切分的概念,这样当你有业务逻辑的时候,比方说我的用户名或者用户的ID来做切分,可以根据用户来做水平区分,而不是把所有的数据都来做水平区分,这是一个基本水平切分的概念,但是我们说什么叫多维分区,我们还有一个主子结合,就是主表和分表的概念,什么叫主表?假如这里有一个案例你看时间是从2014年2月份一直到2016年6月份,我每个月的数据可以单独放在一个字表里面,这个表其实说白了是一个时间可以使用的一个表,完全是可以直接使用的,虽然我用表的概念来描述,但是Sequoia里面它更合理的是集合的概念表达,每一个表我都可以直接使用,很容易你可以性能隔离开来,性能会比较好,但是有的时候我发现因为有一些业务的场景,特别是查询场景,我想把近一年的或者近七年的数据都进行处理,不可能每一个表单独的查询合并,我就可以做主表,你可以把所有的子表组成一个主表,可以按时间跨区域,你特殊写入的时候还是可以从子表直接写,但是查询的时候根据业务的场景要查一年,根据主表的切分,逻辑有含义的切分可以迅速的找到我这是哪一个字表进行查询,可以变成一个非常高效的查询方法,那么这个角度我们就产生了一个多维分区的概念,主子表根据业务的逻辑进行表之间的拆分我们称为垂直分区,每一个表进行因为性能的要求,因为MTP本身性能的要求进行水平分区就是水平分区,当垂直分区和水平分区合在一起我们称之为多维分区的概念。
巨杉还有一个很大的特征,我们有一个对非结构化数据存储的引擎是我们巨杉非常大的特点,在我们传统数据库中,我们如果要存一个数据库是非常痛苦的,也是非常难存储一个很大的数据库,比如自传想存一个视频和大的图片是非常痛苦的,很多时候大家会用到一种解决方案,比如前面是数据库的索引,后面是一个系统来进行对应的管理方法,称之为内容管理平台的一个很多自主研发的时候都用这种方法做,巨杉其实利用数据库本身分布式的特性,做了一个非结构化存储引擎,就是当你不管3兆的图片,有点像云盘的概念,可以把一个大的对象打散拆分在各个系统里,从这个表里你可以看到,我们分成两个层面,一个是逻辑结构怎么管理,一个是实际上我们的大的非结构化的数据怎么管理,逻辑结构就是我们会告诉你,你这个实际的碎片是怎么来分布的,放在哪里,我的连接关系是什么样的,我每个碎片整合起来能够存储多大的数据,从LOBD是一个数据结构,我每个页用的存储数据,我的每个数据哪些是集合放在哪个节点的,当你的数据量很大的时候,可以同时从各个服务器读取,很快的合并成最后的对象发放给你,这个性能是非常高效的,所以这个角度理解的话,当你是一个互联网企业你可以用各种第三方的服务,当如果你是一个企业级的,你想自己搭一个非常大的内容非结构化的管理平台,巨杉很快就可以搭建一个平台,而且可以支持非常大的数据量,所以在非结构化的数据引擎,是占一个很大的特征,因此我们专门制定一个平台,专门打破了传统存储结构的方法,专门做了一个内容管理平台,是针对企业级的。
还有一个很大的优点,就是我们大家可能很多人都在用芒果,一般的芒果只是API的方法,你可以用一个SQL的节点连接所有的数据库,你很喜欢写API的方式,你可以完全用API的方式查询所有的数据库,但是如果你已经写了很多的程序不想做大的改进的时候,有的时候你的应用已经写的很深的时候,你完全可以转换成一个SQL去做,就容易动态的选择查询方式,因为本身巨杉支持事务性的处理,所以应该是比较适合你的传统应用已经写了一部分,不想做大的改动的时候,完全可以很容易的进行迁移。
我们做异地灾备,因为巨杉本身就是分布式的,所以当你指定我的数据库关系以后,比方我两个节点之间跨四十公里或者异地除了网络的差异其实是非常容易自然的解决它的操作方法,异地灾备是天生的投入MPB的架构来做的,我们分布式的业务是事务性的做到强一致性等等。这里简单的就最后讲一下我们的应用案例,我们主要的是金融,其实就是把你全量的历史平台解决,比如我们做过民生银行,你可以把七年的历史数据交易量放在一起查询,可以支持你所有的动态的查询,这样根据你查询的需求自然的把你的数据库变成了我们说热数据、温数据和冷数据处理,不像以前温数据和冷数据要从备份磁带调出来进行查询,这样比较动态进行查询,对你传统的数据库来说是一个非常瘦身的方法。
核心价值真的是通过分布式的架构提升了它的性价比,刚才我讲的内容管理平台就是一个企业级的,我怎么来把银行金融场所的票据,我们再保险业务怎么做理财理赔,该照片怎么处理存储的问题,这是影象内容的平台,我们打破了传统影象管理,因为传统的往往都是一种归档式的,就是不会经常使用,需要的时候调出来察看,但是现在越来越多的视频场景需要实时的进行查询和处理,所以这个数据库巨杉通过分布式的方法可以让你非常方便的把你的业务进行实时的处理。
这是我们举例子叫银行的影象系统,包括医疗的影象系统等等都非常适合来进行处理,第三个就是我们的360度的数据视图,这是什么概念?因为它的本质是跟芒果一样的是一个Sequoia的数据库,因为它是一个Sequoia的架构,意思可以把各种业务场景的数据很方便的放在一个数据库的平台里进行管理,这样就形成数据弧的,每个业务都是来自不同的支流,你不同的业务可以放在一个数据库里进管,在这种情况下你很容易进行多维度的再一次数据的操作,你可以实时的进行交易的查询,也可以通过晚上来跑批进行分析性的查询,来决定我这一群得数据如何来做,这样可以让你不同的业务场景数据进行二次分析处理,传统情况你很难把这个业务的数据和那个业务的数据进行大量的查询的处理,在巨杉里面显得非常的自然和容易。
第四个是我们最后一个业务场景,是一个IOT的场景,IOT里面有两个应用,最早的时候是大数据,我们称之为HDFS高吞吐量在内存进行深度的完全和学习,还有一种就是有的时候你在大数据做了一些业务规则了以后我要进行实时的数据流处理,在很多流处理的时候,很多人还是借用于SHF的场景,但是没有一个数据库的场景非常适合,在巨杉我们打造了一个基本的流处理的底层,在底层种概念里是用巨杉来完成,因为充分的利用了它高并发快速数据查询和再处理的能力,这样它的图谱中其实是基于了很多的高吞吐量,同时又解决了我没法做二级处理的情况,所以两边都能解决,但是因为它要覆盖两个层面,所以它的缺点在于巨杉没法做一个深度挖掘,本身不是做深度挖掘的一个机器学习的数据库,但还是一个偏事务性业务场景业绩高速处理的事物的数据库。举例,比如这里的交通监控,我很快的可以监控一个数据反馈给服务器,根据我的大数据决定的业务规则因为业务处理,做决策性的处理,而不是做数据的深度挖掘等等。这个是我们的社区,大家如果有兴趣可以扫,参与一下我们的社区,我基本上今天时间短,谢谢大家。