今天贝专家给大家分享的是金融科技公司常用存储引擎的演进。
第一阶段:关系数据库
说到关系型数据库大家可能会先想到电商系统或者交易系统,所有的订单信息都保存在关系数据库里面。数据库有很多种类型,第一种是MySQL;第二种是SQL SERVER,本身是微软的体系;第三种是PostgreSQL,是伯克利大学的开发的,被美国气象局大规模使用。
现在具体谈谈MySQL和PostgreSQL两个系统。PostgreSQL跟MySQL的区别是一个开放,一个封闭,一个像ios,一个像andoroid;PostgreSQL是开源开放的平台,任何人都可以在里面写插件,比如数据库函数,可以定制分词函数,或者可以自己定义的索引方式,比如全文索引(GIN),空间索引(RTREE)。
PostgreSQL使用的是进程模型,进程模型的虚拟地址内存是独立的,接收到一些中断,那么只会影响当前的进程,而不会影响其他进程。但是线程模型不一样,一个进程内部的多线程是共享内存的,任何线程中断,比如I/O中断,都会打断进程中的其他线程。
因为PostgreSQL是一个开放的系统,里面会有很多插件。所以写插件时,如果选用了线程模型,写的插件所在的线程如果出现线程中断,就会影响其它查询线程,导致服务不稳定。阿里云的后台系统称为飞天系统,最初设计的时候是基于线程模型的分布式计算系统,线程模型由于调度只用在用户空间内调度而没有内核调度系统的参与,内存共享,消耗资源更少,能提高效率。
淘宝里面所有Hadoop大数据的处理全部迁移到飞天系统,系统里有很多计算任务,当计算任务写的有问题,运行的时候发生中断,会影响其他任务。这违背了设计的开放性原则,作为计算平台,要对任何应用方容错。
以十一贝为例,我们选用数据库的时候,主要考虑了两方面:1. 团队的熟悉程度;2. 是否需要引入更多系统,PG随着应用服务的增加,需要要在数据库中间搭乘连接层,系统架构会更复杂,而我们也没有定制开发的需求,所以最后选用了MySQL。
第二阶段:全文搜索引擎 ES
数据库索引是为了提升查询速度。MySQL在查询时,只能用到一个索引。而我们的应用场景需要多字段检索。比如消费者又有很多属性,比如年龄、地域、性别、职业,我们需要从几亿消费者中根据上面属性进行快速检索。
这时候使用MySQ就有两个问题:1. Mysql的可扩展性,需要单独分表分裤,单表不能超过500万。如果超过的话,要分表分库。2. 多字段索引不能使用多个索引(搜索条件不固定)
所以我们引入了elasticsearch,来解决多字段检索的应用场景。
第三阶段:Hbase
十一贝是一家为消费者提供风险决策的公司,我们要了解要去分析消费者画像。需要更新上亿行数据,上千列特征:比如要分析某个人是不是高净值,一段时间后又要分析这个人是不是早起晚归的类型,这时模型里面要加很多类型,消费者的信息和访问轨迹也会实时更新。
我们希望找一个存储引擎能支持上亿行的数据,支持列式存储高效的空间存储结构的引擎,我们自然想到Hbase,Hbase列式存储,数据写采用追加模式,写吞吐量近乎磁盘写。Hbase的检索使用了很多机制,比如使用了BloomFilter, 来解决100%召回率,低错误率的场景。我们采用了Hbase为存储引擎的实时计算框架,实现了消费者特征分钟级更新。
选保险,不焦虑!