文档章节

谈数据切分后的一些解决思路

王尘宇
 王尘宇
发布于 2017/09/06 23:49
字数 1319
阅读 2
收藏 0
点赞 0
评论 0
当我们在谈去IOE时候,一定会带来的一个问题就是单节点本身的计算或存储能力不足而导致的数据水平或垂直切分,那在数据切分后如何解决这些问题就成为一个好的DaaS层能否真正发挥作用的重点。 对于分布式事务的问题,前面已经谈了很多,对于一个DaaS下针对逻辑库(一个逻辑库下面存在多个物理库节点)是可以通过标准的XA两阶段提交协议来实现分布式事务的,但是本身不仅仅是可靠性的问题,更加关键的是性能问题,特别是在高并发下的性能问题。因此在应用实现的过程中还是需要尽量避免使用分布式事务,仅仅在需要使用分布式事务的少数特殊场景通过显性声明的方式使用分布式事务。对于能够采用事务最终一致性BASE的场景,尽量是结合消息中间件的能力,采用最终一致性的方式;对于不能接受最终一致性的场景尽量采用事务补偿的方式来弥补事务失败造成的影响。 在数据拆分有原有的一个单库多表关联查询操作,往往会转变为一个跨库的join查询操作,而现在的针对mysql的daas方案很难真正的支撑到这种类型的操作,即使能够支持估计也很难真正达到一个高性能。在我们原来的设想中这些问题都简单的转化为应用层去解决,这务必是增加了一个应用层开发的复杂度和难度。而针对这种情况最好的方法是构建一个统一的领域服务层来解决,即最终的上层或顶层是关注的领域服务能力,虽然跨库的问题在DaaS层很难解决,但是在领域服务层却比较容易定制开发相应的服务来解决。 举例来说,一个采购订单查询,采购订单头和明细信息在一个逻辑库,而对于物料和供应商主数据在另外一个物理库,但是对于应用来说关注的是一个完整的采购订单信息。因此完全是可以在领域服务层提供一个采购订单查询的服务,在服务内部进行多次的DaaS层服务调用和组装来完成内部的复杂性。这也是我们常说的,但进行数据库拆分后,务必需要引入更加强壮的领域服务层的原因。 在数据拆分后还有一个比较难以解决的问题,即是对于业务系统的大量查询分析和统计功能的处理,由于我们的数据库进行了切分,导致这些功能已经类似于传统BI里面的OLAP层的功能特性。对于这种业务场景和需求,往往并没有完全的实时性需求,我们能够满足准实时性就可以了。因此对于这类功能推荐的方法仍然是需要将当前的各个分库里面的数据整合到NewSql数据库里面进行处理(Hive,infobright,impala)等,这些数据库需要满足的特性就是MPP+Share nothing架构特性,在这种架构下可以看到对于海量数据的分析和统计可以保证业务需要的准实时性要求,唯一需要考虑的是当前很多的NewSQL数据库都是一个读库,很难进行CUD等各种操作,因此转化后需要解决的问题就是对于业务库中的增量数据如何实时的更新到NewSQL数据库里面,注意是增量更新而不是类似当前很多方案里面的全库重新导入和生成,这也是在解决查询统计功能的一个难点。 对于MySQL的读写分离集群我们看到,随着slave节点的增加,为了保证master和slave节点之间的一致性,将会出现明细的延迟,也直接影响到应用CUD操作的性能。对于这个问题,当前可以考虑的解决方案就是要拆分为两级的读写分离集群,对于第一级的读节点保证高一致性和性能,对于第二级允许有较大的延迟,仅仅用于查询分析等。 在最近的一年过程中,我们对基于Mysql的DaaS层产品逐步的改进和完善,包括分布式事务,DDL操作,函数和存储过程支持,多租户和资源隔离,子查询,底层多种数据库适配和支持等做了大量的改进和性能测试。已经基本形成一个可以在实际业务中应用的产品,同时该产品也开始应用到我们自研的ESB服务总线中。

© 著作权归作者所有

共有 人打赏支持
王尘宇
粉丝 1
博文 450
码字总数 469557
作品 0
西安
深入理解关系型数据库的数据水平切分和垂直切分

深入理解关系型数据库的数据水平切分和垂直切分 ghost丶桃子 2016-05-19 14:47:19 浏览3252 评论0 数据库数据切分水平切分垂直切分分表分库 摘要: 虽然在云计算时代,传统数据库存在着先天性...

morpheusWB ⋅ 06/04 ⋅ 0

单KEY业务,数据库如何水平切分?

本文转载自公众号 架构师之路 作者:沈剑 58同城首席架构师 提醒,本文较长,可提前收藏/转发。 本文将以“用户中心”为例,介绍“单KEY”类业务,随着数据量的逐步增大,数据库性能显著降低...

bjweimengshu ⋅ 2017/12/02 ⋅ 0

数据库Sharding的基本思想和切分策略

一、基本思想 Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多...

不正经啊不正经 ⋅ 2014/12/25 ⋅ 0

分布式数据库架构--排序、分页、分组、实现

最近研究分布式数据库架构,发现排序、分组及分页让着实人有点头疼。现把问题及解决思路整理如下。 一、 多分片(水平切分)返回结果合并(排序) 1、Select + None Aggregate Function的有序...

诺灬晓月 ⋅ 2014/09/18 ⋅ 0

数据库Sharding的基本思想和切分策略

本文着重介绍sharding的基本思想和理论上的切分策略,关于更加细致的实施策略和参考事例请参考我的另一篇博文:数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示 一、基本思想 Shar...

bluishglc ⋅ 2011/01/24 ⋅ 0

数据库Sharding的基本思想和切分策略

本文着重介绍sharding的基本思想和理论上的切分策略,关于更加细致的实施策略和参考事例请参考我的另一篇博文:数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示 一、基本思想 Shar...

张升强 ⋅ 2013/10/22 ⋅ 1

数据库Sharding的基本思想和切分策略

本文着重介绍sharding的基本思想和理论上的切分策略,关于更加细致的实施策略和参考事例请参考我的另一篇博文:数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示 一、基本思想 Shar...

凯文加内特 ⋅ 2014/04/15 ⋅ 0

mysql分片、分区、分表、分库

一、Scale Out(横向扩展)/Scale Up(纵向扩展) Mysql的扩展方案包括Scale Out和Scale Up两种。 Scale Out(横向扩展):是指Application可以在水平方向上扩展。一般对数据中心的应用而言,...

sailikung ⋅ 05/01 ⋅ 0

归并排序与快速排序的简明实现及对比

前言 归并排序与快速排序是两种有实际应用的排序算法,它们有一些共同的特点,整体思路上也比较相近。本文会从更简单的一些排序算法开始,过渡到归并排序和快速排序的实现,并对它们做一些简...

天方夜 ⋅ 2017/12/08 ⋅ 0

关于数据库的分库分表

什么是分库分表 从字面上简单理解,就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。 为什么分库分表 当一张表的数据达到几千万时,你查询一...

壬癸甲乙 ⋅ 2016/03/02 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

解决yum安装报错Protected multilib versions

使用yum安装报错Protected multilib versions原因是因为多个库不能共存,不过更新的话也并不行,但是可以在安装命令后面加上如下一段命令: --setopt=protected_multilib=false 案例: 比如需...

北岩 ⋅ 34分钟前 ⋅ 0

为什么要学习Typescript???

简单来说 目前的typescript就是未来的javascript 为什么?? 这要从ECMA-262标准的第4版说起 对了 我们说的ES5 其实是ECMAScript3.1这个替代性建议被扶正了而已... 那么 第4版标准是什么? 看看...

hang1989 ⋅ 38分钟前 ⋅ 0

linux安装ipfs

一、下载ipfs # cd /usr/local/ipfs/ # wget https://dist.ipfs.io/go-ipfs/v0.4.15/go-ipfs_v0.4.15_linux-amd64.tar.gz # tar -zxvf go-ipfs_v0.4.15_linux-amd64.tar.gz 二、安装ipfs # ......

八戒八戒八戒 ⋅ 44分钟前 ⋅ 0

jvm程序执行慢诊断手册

生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长。本文分享,从业多年形成的排查守则。 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步。...

xpbob ⋅ 44分钟前 ⋅ 0

YII2 advanced 高级版本项目搭建-添加API应用以及多应用

一、YII安裝 安裝yii可以用composer安裝,也可以在yii中文社区下载归档文件安装 composer安装就不介绍了,因为要安装composer,比较麻烦,当然安装了composer是最好的,以后安装yii的插件要用...

botkenni ⋅ 45分钟前 ⋅ 0

在jdk1.8的环境下模拟永久代内存溢出

相信不少小伙伴在看深入理解Java虚拟机的时候,作者给我们举例一个demo来发生PermGen space 1、通过List不断添加String.intern(); 2、通过设置对应的-XX:PermSize与-XX:MaxPermSize(更快看到...

虾几把写 ⋅ 今天 ⋅ 0

开发OpenDaylight组件的完整流程

在前面介绍学习了OpenDaylight的几个重要模块后,这里再来介绍下完整开发一个模块的过程。 OSGI的bundles提供被其他OSGI组件调用的服务。这个教程中展示的是Data Packet Service去解析数据包...

wangxuwei ⋅ 今天 ⋅ 0

Java序列化和反序列化

1、什么是序列化和反序列化 序列化:把对象转换为字节序列的过程。 反序列化:把字节序列恢复成对象的过程。 2、被序列化的类需要实现serializable接口,只是为了标注该对象是可以被序列化的...

IT-Mamba ⋅ 今天 ⋅ 0

流式构建原理

流式构建需要达到分钟级的数据更新频率,Kylin采用类似于Spark Streaming的做法,每隔数分钟进行一次微构建。这边的构建需要考虑到一个延迟因素,分布式网络存在延迟等因素,该时间段的数据有...

无精疯 ⋅ 今天 ⋅ 0

在maven项目工程编写solr代码,需要的依赖

solrJ <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>6.6.2</version> </dependency> <dependency> <groupId>org.apache.httpcomponents<......

爱运动的小乌龟 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部