zoukankan      html  css  js  c++  java
  • 基于大数据计算思想的分布式数据库

    背景:
    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需要启动之后执行命令去查询文件具体在什么节点上;在有些地方可以做的更好,在分布式全文索引中可以体现


    例子:

  • 相关阅读:
    微信小程序-隐藏和显示自定义的导航
    微信小程序-注册和第一个demo
    QRCodeHelper 二维码生成
    Excel 操作
    angular 初体验
    angular 环境搭建
    代码注入
    c# 从一个服务器 访问另外一个服务器上的文件
    oracle 分组取第一行数据 ,查询sql语句
    软件项目验收需要的文档 ,谢谢补充
  • 原文地址:https://www.cnblogs.com/fyzjhh/p/5603288.html
Copyright © 2011-2022 走看看