博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于大数据计算思想的分布式数据库
阅读量:4658 次
发布时间:2019-06-09

本文共 1041 字,大约阅读时间需要 3 分钟。

背景:

it民工一枚,做过java开发,数据库运维,也搞过hadoop,可能是这些经验的结合吧,最近一年一直有个使用mapreduce计算思想的分布式数据库的想法和实践。

 


 

思想:

使用分库分表的思想实现数据存储
使用mapreduce的思想实现计算

 


 

架构图:

 

 

 

组件:

客户端 ( client )
主控机 ( master )
元信息数据库 ( meta database ):系统的基本信息,表的信息,等
存储节点 ( store node ):数据的存储节点,增删改操作的数据都位于存储节点上
计算节点 ( calculate node ):reduce执行的节点

 


 

数据存储过程:

  • 当插入数据的时候,根据分表规则将记录插入到对应的数据库节点中。
  • 当更新数据的时候,根据分表规则判断源数据库节点和目标数据库节点是否变化,如果没有变化,直接更新;如果有变化,在源数据库节点中删除老数据,在目标数据库节点中插入新数据。
  • 当删除数据的时候,根据分表规则在相应的数据库节点中删除。

 

计算过程:

对于一个job,输入是sql(select),经过解析,集合表结构和数据分布的元信息,生成包含多个阶段( stage )的执行计划( execution plan ),它是一棵多输入单输出的阶段树( stage tree ),每个阶段包括三个操作,map 执行 mapsql,数据洗牌 ,reduce 执行 reducesql。

 

计算的过程就是运行执行计划,如下图所示。

 

 

 

优点和特征:

  • 数据存储在数据库中,而不是hdfs中;使用mapreduce大数据的计算思想实现夸数据库节点的计算
  • 表的数据根据字段实现分区:如hash,range,hash和range结合
  • 支持多节点增删改:通过二阶段提交尽量保证事物一致性,相比hdfs删除和修改一般比较麻烦和低效
  • 支持多节点查询:子查询,join,union 等复杂查询
  • 线上系统(主系统)和线下的数据分析挖掘(从系统)做成统一的方案,相比使用hadoop而言,避免数据同步的麻烦,保证实现同步的及时性
  • 充分利用数据库的索引和缓存机制,加快查询速度,特别是表数据量非常大,只需要返回少量数据的情形
  • 相比hdfs来说,数据的分布是有规则的,hdfs需要启动之后执行命令去查询文件具体在什么节点上;在有些地方可以做的更好,在分布式全文索引中可以体现

 

例子:

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/fyzjhh/p/5603288.html

你可能感兴趣的文章
解决Cacti监控图像断断续续问题
查看>>
结构体的传参理解成员的存储方式
查看>>
python 进程与线程(理论部分)
查看>>
什么是API
查看>>
强名称程序集(strong name assembly)——为程序集赋予强名称
查看>>
1028. List Sorting (25)
查看>>
BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
查看>>
ubuntu 重启命令,ubuntu 重启网卡方法
查看>>
Linux的学习:
查看>>
JavaScript中的原型继承原理
查看>>
Python logger模块
查看>>
jquery控制css的display(控制元素的显示与隐藏)
查看>>
关于python做人工智能的一个网页(很牛逼)
查看>>
判断控件的CGRect是否重合,获取控件的最大XY值
查看>>
GET请求在Tomcat中的传递及URI传递
查看>>
P4878 道路修建-美国
查看>>
dp练习
查看>>
[javascript]9宫格拖拽拼图游戏 puzzle
查看>>
Entity Framework底层操作封装(3)
查看>>
InputStream 转换 InputStreamReader再转换BufferedReader
查看>>