没有合适的资源?快使用搜索试试~ 我知道了~
在一次游泳的时候,想起一个问题,为什么hdfs的namenode没有存储块的对应节点信息,导致启动hdfs的时候,datanode需要扫描所有的数据块,再将该datanode上的块信息发送给namenode,namenode才能构建完整的元数据信息。根据文件和数据块的多少,启动hdfs的时候需要几分钟到几个小时。对比下分布式数据库,如果把记录对应的节点信息发送给Master,那就不可想象了。所以在分布式数据库中hdfs的存储策略不可取。同时最近一直被目前的分布式数据库的存储上有几个问题困扰着:在进一步的讨论如何改进分布式数据库的存储之前,先看看分布式数据库和hadoop中hdfs的对比。Fig
资源推荐
资源详情
资源评论
分布式数据库的存储设计改进分布式数据库的存储设计改进
背景
在一次游泳的时候,想起一个问题,为什么 hdfs 的 namenode 没有存储块的对应节点信息,导致启动 hdfs 的时
候,datanode 需要扫描所有的数据块,再将该 datanode 上的块信息发送给 namenode,namenode 才能构建完整的元数据
信息。根据文件和数据块的多少,启动 hdfs 的时候需要几分钟到几个小时。
对比下分布式数据库,如果把记录对应的节点信息发送给 Master,那就不可想象了。所以在分布式数据库中 hdfs 的存储策略
不可取。同时最近一直被目前的分布式数据库的存储上有几个问题困扰着:
在节点数固定的时候,Hdfs 的数据是根据机器负载来决定存储在哪个节点上的,这样做的好处是数据平均分布,可以根
据机器的存储大小加权平均,并且依据机器的负载情况动态调整;目前分布式分布式数据库中做的很有限,该如何改进
呢
添加新节点的时候, Hdfs 配置好新节点指向的 namenode,然后启动新节点即可,存储过一段时间会收敛到平均,如
果想加入后马上使得数据平均分布,可以执行 rebalance 操作;而分布式数据库添加节点的时候,配置好新节点指向的
Master,然后启动新节点之后,通常还需要根据分布的规则进行数据重新分布,甚至规则也可能需要进行拆分合并扩展
等修改,分布式数据库能做到什么程度,如何做 当然如果能做到数据重新分布,rebalance 的操作也就可以加入到分布
式数据库中,两者是共通的,都是做数据的移动,数据重新分布关注过程,rebalance 关注结果。
Hadoop 中的 hdfs 和分布式数据库的对比
在进一步的讨论如何改进分布式数据库的存储之前,先看看分布式数据库和 hadoop 中 hdfs 的对比。
Figure 1: 分布式数据库的架构
Figure 2:hadoop 中 hdfs 的架构
前面提到分布式数据库中把记录对应的节点信息上报给 master 是不可行的方案,这里其实是一种夸大的对比,两者中的概念
按照如下的类比更加合适:
从以上的对比可以看出,如果分布式数据库的节点如果和 datanode 一样,能够在启动的时候扫描该实例上的表信息,上报给
master,那么分布式数据库的做法就可以和 hadoop 中的 hdfs 方式一样,即表的分区随机分散在 dbnode 上,这样元数据的
大小也不会特别大。但我们需要注意到这种随机的方式,使得读写数据的时候,客户端需要知道数据位于哪个或者哪些节点,
这样对已有数据的读写需要经过两步,首先请求 master 数据位于哪个节点,如 hadoop 中 hdfs 需要向 namenode 请求读写
数据所在的 datanode 信息,然后在向 datanode 发送读写命令;如果数据是有规则的分布在节点中,那么可以将这些规则信
息存储在客户端中,避免读写操作频繁请求 master,这对高并发的场合非常有效。所以这篇文章我们还是抛弃随机的分布,
采用有规则的方式来讨论分布式数据库的存储。
核心思想
从存储架构和概念上看这两者非常的相似,甚至都可以归一化了,所以分布式数据库的 sql 计算也可以借鉴 hadoop 中的
mapreduce 计算模型,这篇文章主要讨论存储的改进,为计算打好基础;从上面的背景和问题可以看出,hdfs 有缺点,也有
优点;目前的分布式数据库有不足,也有比 hdfs 做的好地方;这篇文章基于这些优缺点,带着这些问题,采众家之长,对目
前的分布式数据库的存储进行了分析和改进,为基于分布式数据库的分布式 sql 计算能够更好的利用 hadoop 生态圈中的
mapreduce,spark 等分布式计算模型打下良好的基础。
从上面的问题中,经过思考可以发现,分布式数据库的数据是不能随机分布的,是必须有规则的,但是规则需要能够动态调
整,才能解决以上问题,同时没有 hdfs 启动扫描数据块导致启动时间过长的问题。正因为规则是需要能够动态调整的,所以
需要采集数据库节点的负载情况,因为这是规则动态调整的依据。下面就具体分析如何做,有哪些方式可以做。
负载情况
需要采集的负载数据,大概包括如下方面:
机器的 cpu,内存使用,io 情况,网络流量,磁盘存储大小等
数据库的存储大小,qps,tps,慢查询,锁,临时表,连接数等
这些指标中比较关键的指标任何一个超过了它的阈值,这节点就不可以再插入数据,每个指标的阈值根据机器的配置决定;
下面给出一个指标的阈值例子,如下表所示:
通过这只指标可以计算一个值 db_node_load(0<=db_node_load<=1,0 表示没有负载,1 表示负载已满),并且设置一个阈值
insert_load_threshold,db_node_load 小于 insert_load_threshold 的时候,这个节点是可以插入数据的; db_node_load 大
于等于 insert_load_threshold 的时候,这个节点是不可以插入数据的;这里只考虑了插入;对于删除,都必须在这个节点执
剩余9页未读,继续阅读
资源评论
weixin_38606202
- 粉丝: 1
- 资源: 951
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Java语言的前后端分离投票系统设计源码
- 基于Python全栈技术的B2C在线教育商城天宫设计源码
- ubuntu20.04安装教程-ubuntu20.04安装指南:涵盖物理机和虚拟环境下的详细流程
- 基于Java注解的Emqx消息监听器设计源码及后台访问控制API
- 基于Java语言的dormitory-backend学生宿舍管理系统设计源码
- 基于Dart语言的Flutter框架设计源码镜像仓库
- 基于Python的senior-export-list高级清单项目导出工具设计源码
- (源码)基于Spring Boot的武理商城系统.zip
- 基于Python的py12306火车票抢票工具设计源码
- 基于Java语言的法大大混合云OP2.0 SDK设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功