您的当前位置:首页正文

Cobar_基于MySQL的分布式数据库服务中间件

2023-11-09 来源:化拓教育网

Cobar是阿里巴巴研发的关系型数据的分布式处理系统,是提供关系型数据库(MySQL)分布式服务的中间件,该产品成功替代了原先基于Oracle的数据存储方案,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明。

  • 产品在阿里巴巴稳定运行3年以上。
  • 接管了3000+个MySQL数据库的schema。
  • 集群日处理在线SQL请求50亿次以上。
  • 集群日处理在线数据流量TB级别以上。
  • Cobar的核心功能:

    技术分享

    分布式:

    Cobar的分布式主要是通过将表放入不同的库来实现:

  • Cobar支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分
  • Cobar也支持将不同的表放入不同的库
  • 多数情况下,用户会将以上两种方式混合使用
  • 要强调的是,Cobar不支持将一张表,例如test表拆分成test_1, test_2, test_3…..放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。

    HA:

    在用户配置了MySQL心跳的情况下,Cobar可以自动向后端连接的MySQL发送心跳,判断MySQL运行状况,一旦运行出现异常,Cobar可以自动切换到备机工作。需要强调的是:

  • Cobar的主备切换有两种触发方式,一种是用户手动触发,一种是Cobar的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。
  • Cobar只检查MySQL主备异常,不关心主备之间的数据同步,因此用户需要在使用Cobar之前在MySQL主备上配置双向同步,详情可以参阅MySQL参考手册。
  • Cobar的功能约束

  • 不支持跨库情况下的join、分页、排序、子查询操作。
  • SET语句执行会被忽略,事务和字符集设置除外。
  • 分库情况下,insert语句必须包含拆分字段列名。
  • 分库情况下,update语句不能更新拆分字段的值。
  • 不支持SAVEPOINT操作。
  • 暂时只支持MySQL数据节点。
  • 使用JDBC时,不支持rewriteBatchedStatements=true参数设置(默认为false)。
  • 使用JDBC时,不支持useServerPrepStmts=true参数设置(默认为false)。
  • 使用JDBC时,BLOB, BINARY, VARBINARY字段不能使用setBlob()或setBinaryStream()方法设置参数。
  • Cobar逻辑层次图

    技术分享

  • dataSource:数据源,表示一个具体的数据库连接,与物理存在的数据库schema一一对应。
  • dataNode:数据节点,由主、备数据源,数据源的HA以及连接池共同组成,可以将一个dataNode理解为一个分库。
  • table:表,包括拆分表(如tb1,tb2)和非拆分表。
  • tableRule:路由规则,用于判断SQL语句被路由到具体哪些datanode执行。
  • schema:cobar可以定义包含拆分表的schema(如schema1),也可以定义无拆分表的schema(如schema2)。
  • Cobar支持的数据库结构(schema)的层次关系具有较强的灵活性,用户可以将表自由放置不同的datanode,也可将不同的datasource放置在同一MySQL实例上。在实际应用中,需要通过配置文件(schema.xml)来定义我们需要的数据库服务器和表的分布策略。

    Cobar的实现原理

    Cobar的前、后端模块都实现了MySQL协议;当接受到SQL请求时,会依次进行解释(SQL Parser)和路由(SQL Router)工作,然后使用SQL Executor去后端模块获取数据集(后端模块还负责心跳检测功能);如果数据集来自多个数据源,Cobar则需要把数据集进行组合(Result Merge),最后返回响应。

    技术分享

    Cobar采用了主流的Reactor设计模式来处理请求,并使用NIO进行底层的数据交换,这大大提升系统的负载能力。其中,NIOAcceptor用于处理前端请求,NIOConnector则用于管理后端的连接,NIOProcessor用于管理多线程事件处理,NIOReactor则用于完成底层的事件驱动机制,就是看起来和Mina和Netty的网络模型比较相似。

    技术分享

    参考文档:https://github.com/alibaba/cobar

    转自:http://www.biaodianfu.com/cobar.html

    Cobar_基于MySQL的分布式数据库服务中间件

    标签:

    小编还为您整理了以下内容,可能对您也有帮助:

    mysql中间件有哪些

    mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差。下面介绍几款能代替其的mysql开源中间件产品,Atlas,cobar,tddl,让我们看看它们各自有些什么优点和新特性吧。

    Atlas

    Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。

    Altas架构:

    Atlas是一个位于应用程序与MySQL之间,它实现了MySQL的客户端与服务端协议,作为服务端与应用程序通讯,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。

    以下是一个可以参考的整体架构,LVS前端做负载均衡,两个Altas做HA,防止单点故障。

    Altas的一些新特性:

    1.主库宕机不影响读

    主库宕机,Atlas自动将宕机的主库摘除,写操作会失败,读操作不受影响。从库宕机,Atlas自动将宕机的从库摘除,对应用没有影响。在mysql官方的proxy中主库宕机,从库亦不可用。

    2.通过管理接口,简化管理工作,DB的上下线对应用完全透明,同时可以手动上下线。

    3.自己实现读写分离

    (1)为了解决读写分离存在写完马上就想读而这时可能存在主从同步延迟的情况,Altas中可以在SQL语句前增加 /*master*/ 就可以将读请求强制发往主库。

    主库可设置多项,用逗号分隔,从库可设置多项和权重,达到负载均衡。

    4.自己实现分表

    (1)需带有分表字段。

    (2)支持SELECT、INSERT、UPDATE、DELETE、REPLACE语句。

    (3)支持多个子表查询结果的合并和排序。

    这里不得不吐槽Atlas的分表功能,不能实现分布式分表,所有的子表必须在同一台DB的同一个database里且所有的子表必须事先建好,Atlas没有自动建表的功能。

    5.之前官方主要功能逻辑由使用lua脚本编写,效率低,Atlas用C改写,QPS提高,latency降低。

    6.安全方面的提升

    (1)通过配置文件中的pwds参数进行连接Atlas的用户的权限控制。

    (2)通过client-ips参数对有权限连接Atlas的ip进行过滤。

    (3)日志中记录所有通过Altas处理的SQL语句,包括客户端IP、实际执行该语句的DB、执行成功与否、执行所耗费的时间 ,如下面例子。

    图4

    7.平滑重启

    通过配置文件中设置lvs-ips参数实现平滑重启功能,否则重启Altas的瞬间那些SQL请求都会失败。该参数前面挂接的lvs的物理网卡的ip,注意不是虚ip。平滑重启的条件是至少有两台配置相同的Atlas且挂在lvs之后。

    source:https://github.com/Qihoo360/Atlas

    alibaba.cobar

    Cobar是阿里巴巴(B2B)部门开发的一种关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。那么具体说说我们为什么要用它,或说cobar--能干什么?以下是我们业务运行中会存在的一些问题:

    1.随着业务的进行数据库的数据量和访问量的剧增,需要对数据进行水平拆分来降低单库的压力,而且需要高效且相对透明的来屏蔽掉水平拆分的细节。

    2.为提高访问的可用性,数据源需要备份。

    3.数据源可用性的检测和failover。

    4.前台的高并发造成后台数据库连接数过多,降低了性能,怎么解决。

    针对以上问题就有了cobar施展自己的空间了,cobar中间件以proxy的形式位于前台应用和实际数据库之间,对前台的开放的接口是mysql通信协议。将前台SQL语句变更并按照数据分布规则转发到合适的后台数据分库,再合并返回结果,模拟单库下的数据库行为。

    Cobar应用举例

    应用架构:

    应用介绍:

    1.通过Cobar提供一个名为test的数据库,其中包含t1,t2两张表。后台有3个MySQL实例(ip:port)为其提供服务,分别为:A,B,C。

    2.期望t1表的数据放置在实例A中,t2表的数据水平拆成四份并在实例B和C中各自放两份。t2表的数据要具备HA功能,即B或者C实例其中一个出现故障,不影响使用且可提供完整的数据服务。

    cabar优点总结:

    1.数据和访问从集中式改变为分布:

    (1)Cobar支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分

    (2)Cobar也支持将不同的表放入不同的库

    (3) 多数情况下,用户会将以上两种方式混合使用

    注意!:Cobar不支持将一张表,例如test表拆分成test_1,test_2, test_3.....放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。

    2.解决连接数过大的问题。

    3.对业务代码侵入性少。

    4.提供数据节点的failover,HA:

    (1)Cobar的主备切换有两种触发方式,一种是用户手动触发,一种是Cobar的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。

    (2)Cobar只检查MySQL主备异常,不关心主备之间的数据同步,因此用户需要在使用Cobar之前在MySQL主备上配置双向同步。

    cobar缺点:

    开源版本中数据库只支持mysql,并且不支持读写分离。

    source:http://code.alibabatech.com/wiki/display/cobar/Home

    TDDL

    淘宝根据自己的业务特点开发了TDDL(Taobao Distributed Data Layer 外号:头都大了 ©_Ob)框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource实现,具有主备,读写分离,动态数据库配置等功能。

    TDDL所处的位置(tddl通用数据访问层,部署在客户端的jar包,用于将用户的SQL路由到指定的数据库中):

    淘宝很早就对数据进行过分库的处理, 上层系统连接多个数据库,中间有一个叫做DBRoute的路由来对数据进行统一访问。DBRoute对数据进行多库的操作、数据的整合,让上层系统像操作一个数据库一样操作多个库。但是随着数据量的增长,对于库表的分法有了更高的要求,例如,你的商品数据到了百亿级别的时候,任何一个库都无法存放了,于是分成2个、4个、8个、16个、32个……直到1024个、2048个。好,分成这么多,数据能够存放了,那怎么查询它?这时候,数据查询的中间件就要能够承担这个重任了,它对上层来说,必须像查询一个数据库一样来查询数据,还要像查询一个数据库一样快(每条查询在几毫秒内完成),TDDL就承担了这样一个工作。在外面有些系统也用DAL(数据访问层) 这个概念来命名这个中间件。

    下图展示了一个简单的分库分表数据查询策略:

    主要优点:

    1.数据库主备和动态切换

    2.带权重的读写分离

    3.单线程读重试

    4.集中式数据源信息管理和动态变更

    5.剥离的稳定jboss数据源

    6.支持mysql和oracle数据库

    7.基于jdbc规范,很容易扩展支持实现jdbc规范的数据源

    8.无server,client-jar形式存在,应用直连数据库

    9.读写次数,并发度流程控制,动态变更

    10.可分析的日志打印,日志流控,动态变更

    mysql cluster和cobar的使用场景分别是什么样子的

    Cobar是阿里巴巴研发的关系型数据的分布式处理系统,是提供关系型数据库(MySQL)分布式服务的中间件,该产品成功替代了原先基于Oracle的数据存储方案,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明。

  • 产品在阿里巴巴稳定运行3年以上。
  • 接管了3000+个MySQL数据库的schema。
  • 集群日处理在线SQL请求50亿次以上。
  • 集群日处理在线数据流量TB级别以上。
  • Cobar的核心功能:

    技术分享

    分布式:

    Cobar的分布式主要是通过将表放入不同的库来实现:

  • Cobar支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分
  • Cobar也支持将不同的表放入不同的库
  • 多数情况下,用户会将以上两种方式混合使用
  • 要强调的是,Cobar不支持将一张表,例如test表拆分成test_1, test_2, test_3…..放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。

    HA:

    在用户配置了MySQL心跳的情况下,Cobar可以自动向后端连接的MySQL发送心跳,判断MySQL运行状况,一旦运行出现异常,Cobar可以自动切换到备机工作。需要强调的是:

  • Cobar的主备切换有两种触发方式,一种是用户手动触发,一种是Cobar的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。
  • Cobar只检查MySQL主备异常,不关心主备之间的数据同步,因此用户需要在使用Cobar之前在MySQL主备上配置双向同步,详情可以参阅MySQL参考手册。
  • Cobar的功能约束

  • 不支持跨库情况下的join、分页、排序、子查询操作。
  • SET语句执行会被忽略,事务和字符集设置除外。
  • 分库情况下,insert语句必须包含拆分字段列名。
  • 分库情况下,update语句不能更新拆分字段的值。
  • 不支持SAVEPOINT操作。
  • 暂时只支持MySQL数据节点。
  • 使用JDBC时,不支持rewriteBatchedStatements=true参数设置(默认为false)。
  • 使用JDBC时,不支持useServerPrepStmts=true参数设置(默认为false)。
  • 使用JDBC时,BLOB, BINARY, VARBINARY字段不能使用setBlob()或setBinaryStream()方法设置参数。
  • Cobar逻辑层次图

    技术分享

  • dataSource:数据源,表示一个具体的数据库连接,与物理存在的数据库schema一一对应。
  • dataNode:数据节点,由主、备数据源,数据源的HA以及连接池共同组成,可以将一个dataNode理解为一个分库。
  • table:表,包括拆分表(如tb1,tb2)和非拆分表。
  • tableRule:路由规则,用于判断SQL语句被路由到具体哪些datanode执行。
  • schema:cobar可以定义包含拆分表的schema(如schema1),也可以定义无拆分表的schema(如schema2)。
  • Cobar支持的数据库结构(schema)的层次关系具有较强的灵活性,用户可以将表自由放置不同的datanode,也可将不同的datasource放置在同一MySQL实例上。在实际应用中,需要通过配置文件(schema.xml)来定义我们需要的数据库服务器和表的分布策略。

    Cobar的实现原理

    Cobar的前、后端模块都实现了MySQL协议;当接受到SQL请求时,会依次进行解释(SQL Parser)和路由(SQL Router)工作,然后使用SQL Executor去后端模块获取数据集(后端模块还负责心跳检测功能);如果数据集来自多个数据源,Cobar则需要把数据集进行组合(Result Merge),最后返回响应。

    技术分享

    Cobar采用了主流的Reactor设计模式来处理请求,并使用NIO进行底层的数据交换,这大大提升系统的负载能力。其中,NIOAcceptor用于处理前端请求,NIOConnector则用于管理后端的连接,NIOProcessor用于管理多线程事件处理,NIOReactor则用于完成底层的事件驱动机制,就是看起来和Mina和Netty的网络模型比较相似。

    技术分享

    参考文档:https://github.com/alibaba/cobar

    转自:http://www.biaodianfu.com/cobar.html

    Cobar_基于MySQL的分布式数据库服务中间件

    标签:

    mysql cluster和cobar的使用场景分别是什么样子的

    Cobar是阿里巴巴研发的关系型数据的分布式处理系统,是提供关系型数据库(MySQL)分布式服务的中间件,该产品成功替代了原先基于Oracle的数据存储方案,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明。

  • 产品在阿里巴巴稳定运行3年以上。
  • 接管了3000+个MySQL数据库的schema。
  • 集群日处理在线SQL请求50亿次以上。
  • 集群日处理在线数据流量TB级别以上。
  • Cobar的核心功能:

    技术分享

    分布式:

    Cobar的分布式主要是通过将表放入不同的库来实现:

  • Cobar支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分
  • Cobar也支持将不同的表放入不同的库
  • 多数情况下,用户会将以上两种方式混合使用
  • 要强调的是,Cobar不支持将一张表,例如test表拆分成test_1, test_2, test_3…..放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。

    HA:

    在用户配置了MySQL心跳的情况下,Cobar可以自动向后端连接的MySQL发送心跳,判断MySQL运行状况,一旦运行出现异常,Cobar可以自动切换到备机工作。需要强调的是:

  • Cobar的主备切换有两种触发方式,一种是用户手动触发,一种是Cobar的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。
  • Cobar只检查MySQL主备异常,不关心主备之间的数据同步,因此用户需要在使用Cobar之前在MySQL主备上配置双向同步,详情可以参阅MySQL参考手册。
  • Cobar的功能约束

  • 不支持跨库情况下的join、分页、排序、子查询操作。
  • SET语句执行会被忽略,事务和字符集设置除外。
  • 分库情况下,insert语句必须包含拆分字段列名。
  • 分库情况下,update语句不能更新拆分字段的值。
  • 不支持SAVEPOINT操作。
  • 暂时只支持MySQL数据节点。
  • 使用JDBC时,不支持rewriteBatchedStatements=true参数设置(默认为false)。
  • 使用JDBC时,不支持useServerPrepStmts=true参数设置(默认为false)。
  • 使用JDBC时,BLOB, BINARY, VARBINARY字段不能使用setBlob()或setBinaryStream()方法设置参数。
  • Cobar逻辑层次图

    技术分享

  • dataSource:数据源,表示一个具体的数据库连接,与物理存在的数据库schema一一对应。
  • dataNode:数据节点,由主、备数据源,数据源的HA以及连接池共同组成,可以将一个dataNode理解为一个分库。
  • table:表,包括拆分表(如tb1,tb2)和非拆分表。
  • tableRule:路由规则,用于判断SQL语句被路由到具体哪些datanode执行。
  • schema:cobar可以定义包含拆分表的schema(如schema1),也可以定义无拆分表的schema(如schema2)。
  • Cobar支持的数据库结构(schema)的层次关系具有较强的灵活性,用户可以将表自由放置不同的datanode,也可将不同的datasource放置在同一MySQL实例上。在实际应用中,需要通过配置文件(schema.xml)来定义我们需要的数据库服务器和表的分布策略。

    Cobar的实现原理

    Cobar的前、后端模块都实现了MySQL协议;当接受到SQL请求时,会依次进行解释(SQL Parser)和路由(SQL Router)工作,然后使用SQL Executor去后端模块获取数据集(后端模块还负责心跳检测功能);如果数据集来自多个数据源,Cobar则需要把数据集进行组合(Result Merge),最后返回响应。

    技术分享

    Cobar采用了主流的Reactor设计模式来处理请求,并使用NIO进行底层的数据交换,这大大提升系统的负载能力。其中,NIOAcceptor用于处理前端请求,NIOConnector则用于管理后端的连接,NIOProcessor用于管理多线程事件处理,NIOReactor则用于完成底层的事件驱动机制,就是看起来和Mina和Netty的网络模型比较相似。

    技术分享

    参考文档:https://github.com/alibaba/cobar

    转自:http://www.biaodianfu.com/cobar.html

    Cobar_基于MySQL的分布式数据库服务中间件

    标签:

    谁能说下思极有容数据库

    我来说吧!

    一句话介绍:思极有容数据库思极有容数据库思极有容数据库(思极有容数据库)是一款国产自主可控的分布式关系型数据库集群软件,极致稳定,极致易用,极致性能,具备支持跨地域、去中心、高并发、多副本强一致、高可用、高可扩展等特性;目前已经满分通过工信部信通院“分布式事务数据库”测试。

    产品优势:思极有容数据库是完全兼容MySQL协议的分布式的数据库产品,对于需要分库分表的业务需求,无需业务做任何分布式改造,就像使用单机MySQL一样去处理更大的数据,更大的并发。思极有容数据库是由国产集团自主研发的分布式数据库,已经与ARM、飞腾、UOS等国产化体系完全兼容。

    思极有容数据库数据库集群具备极强的可定制性,可以针对国网科技项目需求进行创新性定制开发,并且在数据库核心技术专利方面,信产集团思极有容团队有丰富的专利申请和论文发表经验,充分体现科技项目先进性和创新性。思极有容数据库数据库具有HTAP部署模式,可以同时支撑大并发的联机交易和复杂的大SQL查询,可以通过分层按需横向准线性扩展,不断满足系统事务交易负载和复杂查询负载的增长需求。

    趋势价值分析1)分布式是趋势,但是技术门槛高,对研发,运维的水平要求高。2)思极有容数据库作为分布式解决方案对应用透明,研发人员精力集中在业务实现,而不是被分库分表耗费过多精力,从而提高效率,这是一个很有价值和意义的事情。

    场景及核心特性:

    适用场景1)事务交易场景,对数据操作事务性要求高,对数据一致性要求高的场景2)大并发大数据量场景,针对海量数据库进行大并发的联机交易的场景3)业务规模持续快速增长,对数据库的存储与性能有较强扩展性需求的场景4)报表即席查询展现场景适用业务:支持交易、企业管理、办公、门户、生产控制等信息化业务系统构建。

    思极有容数据库核心特性:1)数据强一致性。思极有容数据库数据库事务数据强一直,任何故障场景下确保集群数据不丢失,数据强一致,RPO为0。2)扩展性。思极有容数据库数据库基于sharding实现数据库横向高可扩展,数据库性能随集群节点扩展准线性提升。3)高可用性。思极有容数据库分布式数据库的目标是能够高度容错磁盘、机器、机架,甚至数据中心故障,在无需人工干预的情况下,可最小化故障的各种影响,确保4个9的高可用性4)成本。思极有容数据库数据库支持廉价PC服务器/虚拟环境部署,可以大幅降低数据库的持有成本。5)国产化。思极有容数据库数据库支持主流的国产CPU与国产OS平台,可以用于构建全栈国产化的解决方案。6)高性能。思极有容数据库数据库在3台国产鲲鹏服务器下可以跑出100万TPMC的性能。

    和竞争对手相比的主要优势1)和传统国产数据库厂家,例如达梦、、神通等相比,思极有容数据库采用原生分布式架构,在集群扩展性和大规模部署后集群性能方面有较大优势;同时思极有容数据库完全兼容和继承MySQL生态,非常的易用易适配,可以无缝衔接大量第三方数据处理组件,有巨大的生态优势。2)和开源数据库MySQL/PostgreSQL相比,思极有容数据库具备强大的扩展能力和准线性的性能提升优势,在数据存储容量、事务吞吐性能、数据库原生高可用方面具备碾压优势。3)和新兴分布式数据库厂家,例如阿里DRDS、腾讯TDSQL等相比,思极有容数据库具备更加完备的SQL语法支持,具备更加强大的事务吞吐性能,对应用适配更加友好。

    DDM是什么意思通俗讲

    DDM的具体意思要根据其具体情况而定,它有以下几种解释:
    1.DDM全称是分布式数据库中间件(Distributed Database Middleware),是解决数据库容量、性能瓶颈和分布式扩展问题的中间件服务,提供分库分表、读写分离、弹性扩容等能力,应对海量数据的高并发访问场景,有效提升数据库读写性能。 华为云推出分布式数据库中间件服务,控制台轻松运维。DDM也可以说是分实时数据管理。
    2.DDM红绿柱线表示N1日大单买入净量与N2日大单买入净量的差额与其涨幅的比例,红柱表示近阶段大单净买入量较大,绿柱表示近阶段大单净卖出量较大,DDM1和DDM2是其5日(参数N1)和10日(参数N2)移动平均线。
    用法:
    (1)如果当日红绿柱线为红色表示当日大单买入量较大,反之如果当日红绿柱线为绿色表示近日大单卖出较多。
    (2)在大盘乾坤主图为*时,出现出击信号时买入。其它不作买入依据。 领先存量资金: 资金达到一定的程度而股价没有涨,红柱出来就可以买入。
    3.DDM 代表 Dave‘s Discount Motors, 就是一个大商店, 各种品牌在里面卖东西,DDM也有一点自己做的东西,很少,都是些小玩意。 DDM和其他品牌的关系就是,你开了一个购物中心,然后里面有各品牌的摊位来卖东西,DDM只是那个购物中心的名字。
    4.DDM(英文全称:Dividend Discount Model,翻译:股利贴现模型),是其中一种最基本的股票内在价值评价模型。
    拓展资料:股利贴现模型(Dividend Discount Model),简称DDM,是其中一种最基本的股票内在价值评价模型。DDM的根据是,如果投资者永远持有这个股票,那么投资者逐年从公司获得的股利的贴现值就是这个股票的价值。根据这个思想来评价股票的方法称为股利贴现模型。

    DDM是什么意思通俗讲

    DDM的具体意思要根据其具体情况而定,它有以下几种解释:
    1.DDM全称是分布式数据库中间件(Distributed Database Middleware),是解决数据库容量、性能瓶颈和分布式扩展问题的中间件服务,提供分库分表、读写分离、弹性扩容等能力,应对海量数据的高并发访问场景,有效提升数据库读写性能。 华为云推出分布式数据库中间件服务,控制台轻松运维。DDM也可以说是分实时数据管理。
    2.DDM红绿柱线表示N1日大单买入净量与N2日大单买入净量的差额与其涨幅的比例,红柱表示近阶段大单净买入量较大,绿柱表示近阶段大单净卖出量较大,DDM1和DDM2是其5日(参数N1)和10日(参数N2)移动平均线。
    用法:
    (1)如果当日红绿柱线为红色表示当日大单买入量较大,反之如果当日红绿柱线为绿色表示近日大单卖出较多。
    (2)在大盘乾坤主图为*时,出现出击信号时买入。其它不作买入依据。 领先存量资金: 资金达到一定的程度而股价没有涨,红柱出来就可以买入。
    3.DDM 代表 Dave‘s Discount Motors, 就是一个大商店, 各种品牌在里面卖东西,DDM也有一点自己做的东西,很少,都是些小玩意。 DDM和其他品牌的关系就是,你开了一个购物中心,然后里面有各品牌的摊位来卖东西,DDM只是那个购物中心的名字。
    4.DDM(英文全称:Dividend Discount Model,翻译:股利贴现模型),是其中一种最基本的股票内在价值评价模型。
    拓展资料:股利贴现模型(Dividend Discount Model),简称DDM,是其中一种最基本的股票内在价值评价模型。DDM的根据是,如果投资者永远持有这个股票,那么投资者逐年从公司获得的股利的贴现值就是这个股票的价值。根据这个思想来评价股票的方法称为股利贴现模型。

    mysql数据库cobar怎么查询

    分布式:
    Cobar的分布式主要是通过将表放入不同的库来实现:
    1. Cobar支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分
    2. Cobar也支持将不同的表放入不同的库
    3. 多数情况下,用户会将以上两种方式混合使用
    这里需要强调的是,Cobar不支持将一张表,例如test表拆分成test_1, test_2, test_3.....放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。

    HA:
    在用户配置了MySQL心跳的情况下,Cobar可以自动向后端连接的MySQL发送心跳,判断MySQL运行状况,一旦运行出现异常,Cobar可以自动切换到备机工作。但需要强调的是:
    1. Cobar的主备切换有两种触发方式,一种是用户手动触发,一种是Cobar的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。
    2. Cobar只检查MySQL主备异常,不关心主备之间的数据同步,因此用户需要在使用Cobar之前在MySQL主备上配置双向同步,详情可以参阅MySQL参考手册。

    mysql数据库cobar怎么查询

    分布式:
    Cobar的分布式主要是通过将表放入不同的库来实现:
    1. Cobar支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分
    2. Cobar也支持将不同的表放入不同的库
    3. 多数情况下,用户会将以上两种方式混合使用
    这里需要强调的是,Cobar不支持将一张表,例如test表拆分成test_1, test_2, test_3.....放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。

    HA:
    在用户配置了MySQL心跳的情况下,Cobar可以自动向后端连接的MySQL发送心跳,判断MySQL运行状况,一旦运行出现异常,Cobar可以自动切换到备机工作。但需要强调的是:
    1. Cobar的主备切换有两种触发方式,一种是用户手动触发,一种是Cobar的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。
    2. Cobar只检查MySQL主备异常,不关心主备之间的数据同步,因此用户需要在使用Cobar之前在MySQL主备上配置双向同步,详情可以参阅MySQL参考手册。

    哪位大神有MyCAT2(数据库中间件) V1.14 官方版软件百度云资源

    链接:https://pan.baidu.com/s/1XzOwfy9MzCL0_6SVNDg40w

    提取码:e8h2 

    软件名称:MyCAT2(数据库中间件)V1.14官方版

    语言:简体中文

    大小:2.00MB

    类别:系统工具

    介绍:MyCAT2是专业的分布式数据库中间件,支持GaleraforMySQL集群,PerconaCluster或者MariaDBcluster。软件基于阿里巴巴的开源项目Cobar,拥有非常优秀的稳定性、可靠性以及出色的体系结构和性能。

    数据库架构选型与落地,看这篇就够了

    随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘IO系统开销,甚至性能上的瓶颈,而单台服务器的资源终究是有限的。

    因此在面对业务扩张过程中,应用程序对数据库系统的健壮性安全性扩展性提出了更高的要求。

    以下,我从数据库架构、选型与落地来让大家入门。

    数据库会面临什么样的挑战呢?

    业务刚开始我们只用单机数据库就够了,但随着业务增长,数据规模和用户规模上升,这个时候数据库会面临IO瓶颈、存储瓶颈、可用性、安全性问题。

    为了解决上述的各种问题,数据库衍生了出不同的架构来解决不同的场景需求。

    将数据库的写操作和读操作分离,主库接收写请求,使用多个从库副本负责读请求,从库和主库同步更新数据保持数据一致性,从库可以水平扩展,用于面对读请求的增加。

    这个模式也就是常说的读写分离,针对的是小规模数据,而且存在大量读操作的场景。

    因为主从的数据是相同的,一旦主库宕机的时候,从库可以切换为主库提供写入,所以这个架构也可以提高数据库系统的安全性可用性

    优点:

    缺点:

    在数据库遇到IO瓶颈过程中,如果IO集中在某一块的业务中,这个时候可以考虑的就是垂直分库,将热点业务拆分出去,避免由热点业务密集IO请求影响了其他正常业务,所以垂直分库也叫业务分库

    优点:

    缺点:

    在数据库遇到存储瓶颈的时候,由于数据量过大造成索引性能下降。

    这个时候可以考虑将数据做水平拆分,针对数据量巨大的单张表,按照某种规则,切分到多张表里面去。

    但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈(单个服务器的IO有上限)。

    所以水平分表主要还是针对数据量较大,整体业务请求量较低的场景。

    优点:

    缺点:

    四、分库分表

    在数据库遇到存储瓶颈和IO瓶颈的时候,数据量过大造成索引性能下降,加上同一时间需要处理大规模的业务请求,这个时候单库的IO上限会*处理效率。

    所以需要将单张表的数据切分到多个服务器上去,每个服务器具有相应的库与表,只是表中数据集合不同。

    分库分表能够有效地缓解单机和单库的性能瓶颈和压力,突破IO、连接数、硬件资源等的瓶颈。

    优点:

    缺点:

    注:分库还是分表核心关键是有没有IO瓶颈

    分片方式都有什么呢?

    RANGE(范围分片)

    将业务表中的某个关键字段排序后,按照顺序从0到10000一个表,10001到20000一个表。最常见的就是按照时间切分(月表、年表)。

    比如将6个月前,甚至一年前的数据切出去放到另外的一张表,因为随着时间流逝,这些表的数据被查询的概率变小,银行的交易记录多数是采用这种方式。

    优点:

    缺点:

    HASH(哈希分片)

    将订单作为主表,然后将其相关的业务表作为附表,取用户id然后hash取模,分配到不同的数据表或者数据库上。

    优点:

    缺点:

    讲到这里,我们已经知道数据库有哪些架构,解决的是哪些问题,因此,我们在日常设计中需要根据数据的特点,数据的倾向性,数据的安全性等来选择不同的架构

    那么,我们应该如何选择数据库架构呢?

    虽然把上面的架构全部组合在一起可以形成一个强大的高可用,高负载的数据库系统,但是架构选择合适才是最重要的。

    混合架构虽然能够解决所有的场景的问题,但是也会面临更多的挑战,你以为的完美架构,背后其实有着更多的坑。

    1、对事务支持

    分库分表后(无论是垂直还是水平拆分),就成了分布式事务了,如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价(XA事务);如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担(TCC、SAGA)。

    2、多库结果集合并(group by,order by)

    由于数据分布于不同的数据库中,无法直接对其做分页、分组、排序等操作,一般应对这种多库结果集合并的查询业务都需要采用数据清洗、同步等其他手段处理(TIDB、KUDU等)。

    3、数据延迟

    主从架构下的多副本机制和水平分库后的聚合库都会存在主数据和副本数据之间的延迟问题。

    4、跨库join

    分库分表后表之间的关联操作将受到*,我们无法join位于不同分库的表(垂直),也无法join分表粒度不同的表(水平), 结果原本一次查询就能够完成的业务,可能需要多次查询才能完成。

    5、分片扩容

    水平分片之后,一旦需要做扩容时。需要将对应的数据做一次迁移,成本代价都极高的。

    6、ID生成

    分库分表后由于数据库独立,原有的基于数据库自增ID将无法再使用,这个时候需要采用其他外部的ID生成方案。

    一、应用层依赖类(JDBC)

    这类分库分表中间件的特点就是和应用强耦合,需要应用显示依赖相应的jar包(以Java为例),比如知名的TDDL、当当开源的sharding-jdbc、蘑菇街的TSharding等。

    此类中间件的基本思路就是重新实现JDBC的API,通过重新实现DataSourcePrepareStatement等操作数据库的接口,让应用层在基本不改变业务代码的情况下透明地实现分库分表的能力。

    中间件给上层应用提供熟悉的JDBC API,内部通过sql解析sql重写sql路由等一系列的准备工作获取真正可执行的sql,然后底层再按照传统的方法(比如数据库连接池)获取物理连接来执行sql,最后把数据结果合并处理成ResultSet返回给应用层。

    优点

    缺点

    二、中间层代理类(Proxy)

    这类分库分表中间件的核心原理是在应用和数据库的连接之间搭起一个代理层,上层应用以标准的MySQL协议来连接代理层,然后代理层负责转发请求到底层的MySQL物理实例,这种方式对应用只有一个要求,就是只要用MySQL协议来通信即可。

    所以用MySQL Navicat这种纯的客户端都可以直接连接你的分布式数据库,自然也天然支持所有的编程语言

    在技术实现上除了和应用层依赖类中间件基本相似外,代理类的分库分表产品必须实现标准的MySQL协议,某种意义上讲数据库代理层转发的就是MySQL协议请求,就像Nginx转发的是Http协议请求。

    比较有代表性的产品有开创性质的Amoeba、阿里开源的Cobar、社区发展比较好的Mycat(基于Cobar开发)等。

    优点

    缺点

    JDBC方案:无中心化架构,兼容市面上大多数关系型数据库,适用于开发高性能的轻量级 OLTP 应用(面向前台)。

    Proxy方案:提供静态入口以及异构语言的支持,适用于 OLAP 应用(面向后台)以及对分片数据库进行管理和运维的场景。

    混合方案:在大型复杂系统中存在面向C端用户的前台应用,也有面向企业分析的后台应用,这个时候就可以采用混合模式。

    JDBC 采用无中心化架构,适用于 Java 开发的高性能的轻量级 OLTP 应用;Proxy 提供静态入口以及异构语言的支持,适用于 OLAP 应用以及对分片数据库进行管理和运维的场景。

    ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBCSharding-ProxySharding-Sidecar(计划中)这3款相互独立的产品组成,他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。

    ShardingSphere提供的核心功能:

    Sharding-Proxy

    定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持

    目前已提供MySQL版本,它可以使用任何兼容MySQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作数据,对DBA更加友好。

    应用程序完全透明,可直接当做MySQL使用。

    适用于任何兼容MySQL协议的客户端。

    Sharding-JDBC

    定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架

    以电商SaaS系统为例,前台应用采用Sharding-JDBC,根据业务场景的差异主要分为三种方案。

    分库(用户)

    问题解析:头部企业日活高并发高,单独分库避免干扰其他企业用户,用户数据的增长缓慢可以不分表。

    拆分维度:企业ID分库

    拆分策略:头部企业单独库、非头部企业一个库

    分库分表(订单)

    问题解析:订单数据增长速度较快,在分库之余需要分表。

    拆分维度:企业ID分库、用户ID分表

    拆分策略:头部企业单独库、非头部企业一个库,分库之后用户ID取模拆分表

    单库分表(附件)

    问题解析:附件数据特点是并发量不大,只需要解决数据增长问题,所以单库IO足以支撑的情况下分表即可。

    拆分维度:用户ID分表

    拆分策略:用户ID取模分表

    问题一:分布式事务

    分布式事务过于复杂也是分布式系统最难处理的问题,由于篇幅有限,后续会开篇专讲这一块内容。

    问题二:分布式ID

    问题三:跨片查询

    举个例子,以用户id分片之后,需要根据企业id查询企业所有用户信息。

    sharding针对跨片查询也是能够支持的,本质上sharding的跨片查询是采用同时查询多个分片的数据,然后聚合结果返回,这个方式对资源耗费比较大,特别是对数据库连接资源的消耗。

    假设分4个数据库,8个表,则sharding会同时发出32个SQL去查询。一下子消耗掉了32个连接;

    特别是针对单库分表的情况要注意,假设单库分64个表,则要消耗64个连接。如果我们部署了2个节点,这个时候两个节点同时查询的话,就会遇到数据库连接数上限问题(mysql默认100连接数)

    问题四:分片扩容

    随着数据增长,每个片区的数据也会达到瓶颈,这个时候需要将原有的分片数量进行增加。由于增加了片区,原先的hash规则也跟着变化,造成了需要将旧数据做迁移。

    假设原先1个亿的数据,hash分64个表,现在增长到50亿的数据,需要扩容到128个表,一旦扩容就需要将这50亿的数据做一次迁移,迁移成本是无法想象的。

    问题五:一致性哈希

    首先,求出每个服务器的hash值,将其配置到一个 0~2^n 的圆环上(n通常取32)

    其次,用同样的方法求出待存储对象的主键 hash值,也将其配置到这个圆环上。

    然后,从数据映射到的位置开始顺时针查找,将数据分布到找到的第一个服务器节点上。

    一致性hash的优点在于加入和删除节点时只会影响到在哈希环中相邻的节点,而对其他节点没有影响。

    所以使用一致性哈希在集群扩容过程中可以减少数据的迁移。

    好了,这次分享到这里,我们日常的实践可能只会用到其中一种方案,但它不是数据库架构的全貌,打开技术视野,才能更好地把存储工具利用起来。

    老规矩,一键三连,日入两千,点赞在看,年薪百万!

    本文作者:Jensen

    7年Java老兵,小米主题设计师,手机输入法设计师,ProcessOn特邀讲师。

    曾涉猎航空、电信、IoT、垂直电商产品研发,现就职于某知名电商企业。

    技术公众号 【架构师修行录】 号主,专注于分享日常架构、技术、职场干货,Java Goals:架构师。

    交个朋友,一起成长!

    数据库架构选型与落地,看这篇就够了

    随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘IO系统开销,甚至性能上的瓶颈,而单台服务器的资源终究是有限的。

    因此在面对业务扩张过程中,应用程序对数据库系统的健壮性安全性扩展性提出了更高的要求。

    以下,我从数据库架构、选型与落地来让大家入门。

    数据库会面临什么样的挑战呢?

    业务刚开始我们只用单机数据库就够了,但随着业务增长,数据规模和用户规模上升,这个时候数据库会面临IO瓶颈、存储瓶颈、可用性、安全性问题。

    为了解决上述的各种问题,数据库衍生了出不同的架构来解决不同的场景需求。

    将数据库的写操作和读操作分离,主库接收写请求,使用多个从库副本负责读请求,从库和主库同步更新数据保持数据一致性,从库可以水平扩展,用于面对读请求的增加。

    这个模式也就是常说的读写分离,针对的是小规模数据,而且存在大量读操作的场景。

    因为主从的数据是相同的,一旦主库宕机的时候,从库可以切换为主库提供写入,所以这个架构也可以提高数据库系统的安全性可用性

    优点:

    缺点:

    在数据库遇到IO瓶颈过程中,如果IO集中在某一块的业务中,这个时候可以考虑的就是垂直分库,将热点业务拆分出去,避免由热点业务密集IO请求影响了其他正常业务,所以垂直分库也叫业务分库

    优点:

    缺点:

    在数据库遇到存储瓶颈的时候,由于数据量过大造成索引性能下降。

    这个时候可以考虑将数据做水平拆分,针对数据量巨大的单张表,按照某种规则,切分到多张表里面去。

    但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈(单个服务器的IO有上限)。

    所以水平分表主要还是针对数据量较大,整体业务请求量较低的场景。

    优点:

    缺点:

    四、分库分表

    在数据库遇到存储瓶颈和IO瓶颈的时候,数据量过大造成索引性能下降,加上同一时间需要处理大规模的业务请求,这个时候单库的IO上限会*处理效率。

    所以需要将单张表的数据切分到多个服务器上去,每个服务器具有相应的库与表,只是表中数据集合不同。

    分库分表能够有效地缓解单机和单库的性能瓶颈和压力,突破IO、连接数、硬件资源等的瓶颈。

    优点:

    缺点:

    注:分库还是分表核心关键是有没有IO瓶颈

    分片方式都有什么呢?

    RANGE(范围分片)

    将业务表中的某个关键字段排序后,按照顺序从0到10000一个表,10001到20000一个表。最常见的就是按照时间切分(月表、年表)。

    比如将6个月前,甚至一年前的数据切出去放到另外的一张表,因为随着时间流逝,这些表的数据被查询的概率变小,银行的交易记录多数是采用这种方式。

    优点:

    缺点:

    HASH(哈希分片)

    将订单作为主表,然后将其相关的业务表作为附表,取用户id然后hash取模,分配到不同的数据表或者数据库上。

    优点:

    缺点:

    讲到这里,我们已经知道数据库有哪些架构,解决的是哪些问题,因此,我们在日常设计中需要根据数据的特点,数据的倾向性,数据的安全性等来选择不同的架构

    那么,我们应该如何选择数据库架构呢?

    虽然把上面的架构全部组合在一起可以形成一个强大的高可用,高负载的数据库系统,但是架构选择合适才是最重要的。

    混合架构虽然能够解决所有的场景的问题,但是也会面临更多的挑战,你以为的完美架构,背后其实有着更多的坑。

    1、对事务支持

    分库分表后(无论是垂直还是水平拆分),就成了分布式事务了,如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价(XA事务);如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担(TCC、SAGA)。

    2、多库结果集合并(group by,order by)

    由于数据分布于不同的数据库中,无法直接对其做分页、分组、排序等操作,一般应对这种多库结果集合并的查询业务都需要采用数据清洗、同步等其他手段处理(TIDB、KUDU等)。

    3、数据延迟

    主从架构下的多副本机制和水平分库后的聚合库都会存在主数据和副本数据之间的延迟问题。

    4、跨库join

    分库分表后表之间的关联操作将受到*,我们无法join位于不同分库的表(垂直),也无法join分表粒度不同的表(水平), 结果原本一次查询就能够完成的业务,可能需要多次查询才能完成。

    5、分片扩容

    水平分片之后,一旦需要做扩容时。需要将对应的数据做一次迁移,成本代价都极高的。

    6、ID生成

    分库分表后由于数据库独立,原有的基于数据库自增ID将无法再使用,这个时候需要采用其他外部的ID生成方案。

    一、应用层依赖类(JDBC)

    这类分库分表中间件的特点就是和应用强耦合,需要应用显示依赖相应的jar包(以Java为例),比如知名的TDDL、当当开源的sharding-jdbc、蘑菇街的TSharding等。

    此类中间件的基本思路就是重新实现JDBC的API,通过重新实现DataSourcePrepareStatement等操作数据库的接口,让应用层在基本不改变业务代码的情况下透明地实现分库分表的能力。

    中间件给上层应用提供熟悉的JDBC API,内部通过sql解析sql重写sql路由等一系列的准备工作获取真正可执行的sql,然后底层再按照传统的方法(比如数据库连接池)获取物理连接来执行sql,最后把数据结果合并处理成ResultSet返回给应用层。

    优点

    缺点

    二、中间层代理类(Proxy)

    这类分库分表中间件的核心原理是在应用和数据库的连接之间搭起一个代理层,上层应用以标准的MySQL协议来连接代理层,然后代理层负责转发请求到底层的MySQL物理实例,这种方式对应用只有一个要求,就是只要用MySQL协议来通信即可。

    所以用MySQL Navicat这种纯的客户端都可以直接连接你的分布式数据库,自然也天然支持所有的编程语言

    在技术实现上除了和应用层依赖类中间件基本相似外,代理类的分库分表产品必须实现标准的MySQL协议,某种意义上讲数据库代理层转发的就是MySQL协议请求,就像Nginx转发的是Http协议请求。

    比较有代表性的产品有开创性质的Amoeba、阿里开源的Cobar、社区发展比较好的Mycat(基于Cobar开发)等。

    优点

    缺点

    JDBC方案:无中心化架构,兼容市面上大多数关系型数据库,适用于开发高性能的轻量级 OLTP 应用(面向前台)。

    Proxy方案:提供静态入口以及异构语言的支持,适用于 OLAP 应用(面向后台)以及对分片数据库进行管理和运维的场景。

    混合方案:在大型复杂系统中存在面向C端用户的前台应用,也有面向企业分析的后台应用,这个时候就可以采用混合模式。

    JDBC 采用无中心化架构,适用于 Java 开发的高性能的轻量级 OLTP 应用;Proxy 提供静态入口以及异构语言的支持,适用于 OLAP 应用以及对分片数据库进行管理和运维的场景。

    ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBCSharding-ProxySharding-Sidecar(计划中)这3款相互独立的产品组成,他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。

    ShardingSphere提供的核心功能:

    Sharding-Proxy

    定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持

    目前已提供MySQL版本,它可以使用任何兼容MySQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作数据,对DBA更加友好。

    应用程序完全透明,可直接当做MySQL使用。

    适用于任何兼容MySQL协议的客户端。

    Sharding-JDBC

    定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架

    以电商SaaS系统为例,前台应用采用Sharding-JDBC,根据业务场景的差异主要分为三种方案。

    分库(用户)

    问题解析:头部企业日活高并发高,单独分库避免干扰其他企业用户,用户数据的增长缓慢可以不分表。

    拆分维度:企业ID分库

    拆分策略:头部企业单独库、非头部企业一个库

    分库分表(订单)

    问题解析:订单数据增长速度较快,在分库之余需要分表。

    拆分维度:企业ID分库、用户ID分表

    拆分策略:头部企业单独库、非头部企业一个库,分库之后用户ID取模拆分表

    单库分表(附件)

    问题解析:附件数据特点是并发量不大,只需要解决数据增长问题,所以单库IO足以支撑的情况下分表即可。

    拆分维度:用户ID分表

    拆分策略:用户ID取模分表

    问题一:分布式事务

    分布式事务过于复杂也是分布式系统最难处理的问题,由于篇幅有限,后续会开篇专讲这一块内容。

    问题二:分布式ID

    问题三:跨片查询

    举个例子,以用户id分片之后,需要根据企业id查询企业所有用户信息。

    sharding针对跨片查询也是能够支持的,本质上sharding的跨片查询是采用同时查询多个分片的数据,然后聚合结果返回,这个方式对资源耗费比较大,特别是对数据库连接资源的消耗。

    假设分4个数据库,8个表,则sharding会同时发出32个SQL去查询。一下子消耗掉了32个连接;

    特别是针对单库分表的情况要注意,假设单库分64个表,则要消耗64个连接。如果我们部署了2个节点,这个时候两个节点同时查询的话,就会遇到数据库连接数上限问题(mysql默认100连接数)

    问题四:分片扩容

    随着数据增长,每个片区的数据也会达到瓶颈,这个时候需要将原有的分片数量进行增加。由于增加了片区,原先的hash规则也跟着变化,造成了需要将旧数据做迁移。

    假设原先1个亿的数据,hash分64个表,现在增长到50亿的数据,需要扩容到128个表,一旦扩容就需要将这50亿的数据做一次迁移,迁移成本是无法想象的。

    问题五:一致性哈希

    首先,求出每个服务器的hash值,将其配置到一个 0~2^n 的圆环上(n通常取32)

    其次,用同样的方法求出待存储对象的主键 hash值,也将其配置到这个圆环上。

    然后,从数据映射到的位置开始顺时针查找,将数据分布到找到的第一个服务器节点上。

    一致性hash的优点在于加入和删除节点时只会影响到在哈希环中相邻的节点,而对其他节点没有影响。

    所以使用一致性哈希在集群扩容过程中可以减少数据的迁移。

    好了,这次分享到这里,我们日常的实践可能只会用到其中一种方案,但它不是数据库架构的全貌,打开技术视野,才能更好地把存储工具利用起来。

    老规矩,一键三连,日入两千,点赞在看,年薪百万!

    本文作者:Jensen

    7年Java老兵,小米主题设计师,手机输入法设计师,ProcessOn特邀讲师。

    曾涉猎航空、电信、IoT、垂直电商产品研发,现就职于某知名电商企业。

    技术公众号 【架构师修行录】 号主,专注于分享日常架构、技术、职场干货,Java Goals:架构师。

    交个朋友,一起成长!

    如何用navicat连接mysql数据库

    1、首先用navicat新建一个数据库database1,如下图所示。

    2、然后在database1数据库中,新建一个表table2,在table2中添加新的数据。

    3、新建一个名称为mysql_query的数据库,如下图所示。

    4、然后在页面中用mysql_connect 函数与数据库建立连接。

    5、然后用mysql_select_db函数选择要查询的数据库,如下图所示。

    6、最后将mysql_query。php文件在浏览器中打开,查看查询到数据库中的内容的结果,如下图所示就完成了。

    如何用php操作mysql数据库?

    1、首先在mysql数据库,创建一张data表,表内插入多条数据,用于测试。

    2、创建一个test.php文件,在文件内,使用header()方法将页面的编码格式设置为utf-8。

    3、然后在test.php文件内,连接mysql数据库,并使用mysqli_select_db选择要操作的数据库。

    4、在test.php文件内,创建一条查询data数据表所有数据的sql语句,再使用mysqli_query执行sql语句。

    5、在test.php文件内,通过while语句,使用mysqli_fetch_assoc函数将结果集数据转换为数组形式,并通过echo输出每一条记录的username值。

    6、最后在浏览器打开test.php文件,查看结果,如下图所示就完成了。