searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

分布式数据库简介

2023-10-07 09:20:11
35
0

什么是分布式数据库

传统数据库(例如mysql)一般是单机数据库,其容量和性能受宿主机本身的性能的限制,在web系统这种数据量性能要求一般的场景下其可以很好的满足,但是在大数据量大吞吐量的场景(例如:云数据库这种单实例多租户)下其力不从心,借用分布式的设计理念产生了分布式数据库,用多台物理机承载数据库实例从而扩展数据库的能力。

与mysql的区别

mysql通过各种扩展组件也可以实现类似分布式数据库的能力,但是和云原生的分布式数据库有很大区别。

一种分布式mysql的实现

1.  接入层

使用nginx这种网关做接入层,实现高可用和负载均衡;

2.  路由转发层

其实就是一个mysql实例,只不过这个实例里面存储的是用户元数据,比如:某个用户的某个表的某个范围的行是存储在哪一个mgr中的,用来做路由转发;

3.  mgr集群

mysql可以用多个实例组成一个mgr(MySQL Group Replication),比如三个mysql实例组成一个mgr,那么这个mgr中一个主mysql负责读写和数据同步,其他从mysql负责数据冗余也可以提供读服务,多个mgr就组成了一个mgr集群,配合上路由转发就实现了分布式;

可以看出上面的分布式mysql和主流的分布式存储设计不大一样,主要特点就是冗余,其最小单位是一个mysql实例,可以结合下面介绍的分布式数据库架构对比;

架构

1.  元数据引擎

  1. 管理存储集群和一些数据库中的元数据,比如dbschema,租户信息之类的;和大部分分布式存储系统类似。
  2. 当数据发生异常时,调度数据迁移;

2.  查询引擎

所谓查询引擎主要有两个功能,

  1. 解析sql语句(或者是dataframe这种查询)将其转换成可执行的任务;
  2. 执行这些任务,根据元数据引擎中的信息将任务转发至对应的存储节点;

3.  索引引擎

数据库都有的东西,主要功能就是提高查询效率,类似与书本的目录;

4.  存储引擎

  1. 主流一般都是用lsm-tree算法,比如tikv直接使用rocksdb,cnosdb使用自己实现的lsm-tree引擎
  2. 既然云原生,那么可以使用云服务,比如对象存储来作为存储后端,比如OceanDB的ceresdb

架构

  1. 一个分布式数据库实例只需要一个元数据集群,一般搞三个元数据实例(raft算法);
  2. 可以看出查询引擎是无状态的,所以它可以任意水平扩展
  3. 索引引擎是与数据一一对应的,所以索引引擎需要伴随存储引擎部署
  4. 存储引擎也是支持水平扩展的,只是需要在元数据管理集群中注册;

OLAP

一般来说,分布式数据库是面向大量数据的存储计算的(OLAP),与mysql这种OLTP的数据库还有些不一样,简单说来就是,对于mysql这种一般是的场景就是一行的写入和读取,但是分布式数据库更多会面对count,max这种在查询时附带函数计算的场景,而且这种计算大多是面向列的计算,所以在设计上,会有一下区别:

mysql:OLTP + 行存;

分布式数据库:OLAP + 列存

行存与列存:是指数据在底层的组织方式;

0条评论
0 / 1000
Mr. 油
89文章数
0粉丝数
Mr. 油
89 文章 | 0 粉丝
原创

分布式数据库简介

2023-10-07 09:20:11
35
0

什么是分布式数据库

传统数据库(例如mysql)一般是单机数据库,其容量和性能受宿主机本身的性能的限制,在web系统这种数据量性能要求一般的场景下其可以很好的满足,但是在大数据量大吞吐量的场景(例如:云数据库这种单实例多租户)下其力不从心,借用分布式的设计理念产生了分布式数据库,用多台物理机承载数据库实例从而扩展数据库的能力。

与mysql的区别

mysql通过各种扩展组件也可以实现类似分布式数据库的能力,但是和云原生的分布式数据库有很大区别。

一种分布式mysql的实现

1.  接入层

使用nginx这种网关做接入层,实现高可用和负载均衡;

2.  路由转发层

其实就是一个mysql实例,只不过这个实例里面存储的是用户元数据,比如:某个用户的某个表的某个范围的行是存储在哪一个mgr中的,用来做路由转发;

3.  mgr集群

mysql可以用多个实例组成一个mgr(MySQL Group Replication),比如三个mysql实例组成一个mgr,那么这个mgr中一个主mysql负责读写和数据同步,其他从mysql负责数据冗余也可以提供读服务,多个mgr就组成了一个mgr集群,配合上路由转发就实现了分布式;

可以看出上面的分布式mysql和主流的分布式存储设计不大一样,主要特点就是冗余,其最小单位是一个mysql实例,可以结合下面介绍的分布式数据库架构对比;

架构

1.  元数据引擎

  1. 管理存储集群和一些数据库中的元数据,比如dbschema,租户信息之类的;和大部分分布式存储系统类似。
  2. 当数据发生异常时,调度数据迁移;

2.  查询引擎

所谓查询引擎主要有两个功能,

  1. 解析sql语句(或者是dataframe这种查询)将其转换成可执行的任务;
  2. 执行这些任务,根据元数据引擎中的信息将任务转发至对应的存储节点;

3.  索引引擎

数据库都有的东西,主要功能就是提高查询效率,类似与书本的目录;

4.  存储引擎

  1. 主流一般都是用lsm-tree算法,比如tikv直接使用rocksdb,cnosdb使用自己实现的lsm-tree引擎
  2. 既然云原生,那么可以使用云服务,比如对象存储来作为存储后端,比如OceanDB的ceresdb

架构

  1. 一个分布式数据库实例只需要一个元数据集群,一般搞三个元数据实例(raft算法);
  2. 可以看出查询引擎是无状态的,所以它可以任意水平扩展
  3. 索引引擎是与数据一一对应的,所以索引引擎需要伴随存储引擎部署
  4. 存储引擎也是支持水平扩展的,只是需要在元数据管理集群中注册;

OLAP

一般来说,分布式数据库是面向大量数据的存储计算的(OLAP),与mysql这种OLTP的数据库还有些不一样,简单说来就是,对于mysql这种一般是的场景就是一行的写入和读取,但是分布式数据库更多会面对count,max这种在查询时附带函数计算的场景,而且这种计算大多是面向列的计算,所以在设计上,会有一下区别:

mysql:OLTP + 行存;

分布式数据库:OLAP + 列存

行存与列存:是指数据在底层的组织方式;

文章来自个人专栏
存储专栏
89 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0