市面上分布式数据库目前越来越多,但是流派主要分3波,分库分表加mysql存储,Spanner路线,Aurora路线。
走分库分表加mysql存储路线的,开源产品中有cobar,mycat,sharding-jdbc等,闭源能使用到的产品包括阿里云上的DRDS(TDDL)、腾讯云上的DCDB(TDSQL)等,这条路线最近被另外两条路线抨击比较多,因为站在某些业务场景和规模上(一般中小场景或者规模),分库分表确实对业务要求比较高,存在比较繁重的业务改造,核心问题在于这条路线暴露了拆分条件,需要让用户根据业务特性来判断,一下子把产品做成了一个架构设计,实际上拆分条件就是数据聚簇的依据,类似用单机关系型数据库也会纠结选择哪个唯一字段做主键一样,无非让查询相对二级索引少走一次btree检索,但是分库分表或者分布式数据库领域,维护二级索引一致性无论是强一致还是非强一致都是一个比较痛苦的事情,因为索引和聚簇的数据可能不在一个节点上,这样就跨了一次网络,不确定性大幅度上升,但是二级索引还是有必要存在的,一些产品也提供了这种能力支撑,但是不能滥用。某种意义上来说,把应用改成使用分库分表的数据库解决方案时,就如同单机MySQL只支持了主键索引,这个时候你的应用应该怎么写的问题,不过在核心业务场景,分库分表恰好屏蔽掉了让开发玩得很爽,正式上线压力一大就出故障的问题,并且方案非常成熟,另外MySQL存储是一种非常稳定的存在,以及运维工具、人才储备都是相当充足的,所以你把分布式数据库比作一位姑娘,Spanner路线和Aurora路线的产品就像一个让你浴火焚身的热辣妹子,分库分表加mysql路线就如同一个其貌不扬,但是能够踏踏实实每天把饭菜做好给你吃的居家女孩。
走Spanner路线,开源产品中有最近比较火的TiDB,以及spanner原班人马出来打造的CockroachDB,闭源能使用到的就是Google Cloud上的Spanner产品本尊,当然阿里云上的Oceanbase也走的这条路线,虽然一直挂在阿里云上,但是一直就不见客。这条路线实际上和分库分表加MySQL唯一区别就在于事务的处理。关系型数据库里面,最核心的实际上就是事务,所有的索引、唯一约束、主键约束、外键约束、DDL等都依赖于事务。分布式数据库这个领域,事务的核心在于可见性,一致性或者原子性可以通过各种log实现,但是可见性只有两条路:分布式锁或者分布式MVCC,其实腾讯的DCDB底下基于Mariadb经过艰难困苦的改造,勉强基于XA实现了分布式事务(腾讯之前放出过来一篇文章,随后马上被删除了),但是代价也非常巨大,性能不行,而基于原生MySQL,XA压根是一个鸡肋,两个重大问题长期没有解决(半开事务没有挂起能力,主备同步问题),直到最近的5.7.X才得到解决,效果未知,另外分布式死锁是这个领域里面最恶心的问题。而如果想基于分布式MVCC实现分布式可见性,一个是MySQL并没有暴露或者很难暴露版本,另外如果想要基于MySQL上做一层MVCC,数据实时合并的噩梦让人恐惧,所以这条路线的产品很不错,但是存储必然是一个新的东西,需要时间和场景历练,没个5-6年下不来。
走Aurora路线的,开源据了解应该没有,闭源能够使用到的只有AWS上的Aurora,阿里云上的PolarDB也走这个路线,但是目前还在内测,具体未知,从某种意义上来说,Oracle RAC是这类数据库的祖先,归并到这类也无可厚非,这条路线实际上我个人觉得是从大部分用户诉求去考虑了,就是大部分用户QPS打不满单机数据库,但是数据把磁盘给撑爆了。可能有人想一个数据库机器下挂很多个盘不就解决问题了,但是还是会碰到数据库备份、克隆、DDL因为大数据文件的搬迁导致的延迟和不确定性,所以解决方案就从存储这层下手,分布式用户态文件系统、RDMA等措施改造底层存储,解决数据传输带宽限制、数据读写损耗、数据备份缓慢等问题,但是上层MySQL还是MySQL,全兼容,存储又能做得很大,不过同时因为分布式能力的缺失,事务读写只能单点,只能靠强力的机器堆,满足大部分用户的数据事务读写要求。AWS在国内不给力,不过如果有机会在Aurora上实际跑跑业务可能是真正了解这种架构优缺点的唯一方法,因为我在google上找Aurora的缺点,确实没有找到,要么实在太好了,要么就是用得人还不多。
使用关系型数据库是一个控制欲望的过程,20年前,关系型数据库应对当时的世界可能足够了,你可以用很复杂的关系模型,因为数据量和访问量就那么大,但是现在时代发展了,很多时候我们没有意识到以前实现的关系模型可能并不适用于现在的业务场景,说得难听点,就是糟粕了。这个领域是在不断往前看,也许以前在做分库分表的产品,会推出新存储的强一致分布式数据库,做Aurora类型数据库的加一层共享内存实现事务读写的强一致性,而做spanner路线数据库是难度最大、成熟曲线最高的一种方式,需要时间。
分享到:
相关推荐
#资源达人分享计划#
原生分布式数据库的高敏数据保护实践 前沿技术 B站SRE实践之路 基于微服务架构的智能对话分析SaaS平台 微服务框架实现-舍与不舍 中通物流的上云实践 中小企业的物联网之路 数据技术 动态实时标签处理平台架构 经济...
#资源达人分享计划#
但它必须依托云计算的分布式处理、分布式数据库和云存储、虚拟化技术。[2] 随着云时代的来临,大数据(Big data)也吸引了越来越多的关注。分析师团队认为,大数据(Big data)通常用来形容一个公司创造的大量非...
阅读本文之前,需要你对数据库事务的ACID、CAP理论、Base理论以及两阶段提交有一定的认知,不熟悉者请自行百度或者阅读参考博客1、2、3和4。除此之外,在阅读本文过程中,如果对某种方案不理解,强烈建议先阅读对应...
数据库技术发展历史 无库时代 层次状数据库 网状数据库 关系型数据库 分布式数据库 大数据技术发展全文共36页,当前为第2页。 层次型数据库 大数据技术发展全文共36页,当前为第3页。 关系型数据库之父:E.F.Codd ...
认知是开源数据库处理管道。 其目的是将关系数据库中的常见二进制文档(如PDF和Word文档)转换为通用表示形式(如XHTML),并可以选择以自定义方式对其进行修改(例如,对它们应用假名/匿名化算法)。 它的主要用例...
本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,...系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat
在开发中采用Java语言进行开发,项目整体使用Struts2,hibernate,spring三大框架作为开发的基本环境,使用Lucene全文检索框架进行文件的搜索,MyCat中间件处理分布式数据库和分布式事务问题等问题,OpenOfiice技术...
金融级分布式高性能图数据库的构建 开源开放的知识图谱工具和数据生态 可解释推荐的前沿进展 可控、可靠的数据到文本生成技术 图谱的构建、融合应用及开放 事件图谱在智能客服问答中的应用 搜索场景下的智能实体推荐...
熟悉JavaSE/JavaEE,具有面向对象的思维认知; 熟悉Spring、Spring MVC、MyBatis、Hibernate、Spring Boot、SpringData等主流开发框架,能进行SSH、SSM、SSS框架整合开发; 熟练使用关系型数据库MySQL及非关系型...
人工智能的研究和应用领域全文共3页,当前为第1页。人工智能的研究和应用领域全文共3页,当前为第1页。...分布式人工智能 分布式人工智能主要研究如何协调逻辑或物理上分散的智能系统之间的行为,以便实现问题的并行求
数据存储 数据库存储方面,有单机/分布式、关系型/非关系型、列式存储/行式存储三个维度的划 分,各种维度交叉下都有对应产品来解决某个场景下的需求。 在数据量较小的情况下,一般采取单机数据库,如应用非常广泛...
在系统认知工程中,一项工作是复制Zhang和Norman(1994)的,该探索了分布式认知任务中的各种表示形式。 因此,我制作了这个小型游戏网站,该网站设计了一种投币游戏,并具有与类似的规则。 执行 硬币游戏有三个规则...
PyBossa 是一个开源平台,用于众包在线(志愿者)协助执行需要人类认知、知识或智能(例如图像分类、转录、信息定位等)的任务。 PyBossa 的灵感来自众包引擎,但它是用 Python 编写的(因此得名!)。 它可以用于...
对大数据的一部分认知在于,它是如此之大,分析它需要多个工作负载,这是AWS的定义。当你的技术达到极限时,也就是数据的极限"。 大数据不是关于如何定义,最重要的是如何使用。最大的挑战在于哪些技术能更好的使用...
超级计算基础设施、分布式计算基础设施和云计算中心,可持续发展的高性能计算应用生态环境,下一代超级计算机。 9 人工智能基础资源服务 行业训练资源库 在行业应用中,为人工智能算法提供训练集的各类数据资源。 10...