• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 数据从mysql迁移到hbase的一些思考及设计

数据从mysql迁移到hbase的一些思考及设计

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了mysql,hbase,思考及设计等相关知识,希望本文的分享对您有所帮助

一、进行迁移的原因

由于业务的发展,使用mysql进行建立索引进行搜索已经造成数据流的瓶颈卡在了数据库io,例如每次dump全表的时候,会造成压力过大,造成耗时很长,并且当前的数据量基本上已经达到了亿级别的数据量,如果希望mysql能更好的提供服务,下一步必须考虑分库分表才可以;基于这种情况下,考虑使用hbase用来进行数据的存储,因为hbase所能承受的数据量远大于mysql,并且对列的扩展也很方便

二、关系型数据库与Nosql的一些区别

(1)存储方式的区别

在类似mysql,sqlserver,oracle等关系型数据库,数据的存储是按照行进行存储的,如下图所示:


但是在hbase里面,所有的数据是基于列进行存储的,如下所示:


其中hbase的逻辑模型如下所示:


其中:com.cnn.ww对应的是rowkey,相当于mysql的主键的概念

contents,anchor:这两个对应的是列族的概念,在物理的存储上,同一个列族的数据存储在相同文件

cnnsi.com,mylook.ca:对应的是列族下面的列,在hbase中列是可以动态增加的

对应的方格数据表示的是单元数据,即对应rowkey,cf:column下面的具体的值

其中tn:表示的是时间戳,单元数据的不同版本

其中有一张存储结构如下:



(2)CRUD一些区别

CRUD是数据库的最基本也是最常用的操作,在hbase里面也有对应的命令,例如建表语句对于mysql的在此不详述,对于hbase shell的如下所示

create ‘table’,‘columnfamily’

即可以创建一个名为table,列族为columnfamily的表,其他的一些blocksize,version数据为默认

读取数据的时候,在hbase语句如:get ‘table’,'row',‘cf:column’即可得到对应的数据

更新数据的时候,在hbase中没有对应更新的概念,只是会有一个新的版本,从时间戳上可以体现出来,所用的语句为

put ‘table’,‘row’,‘cf:name’,‘value’

即可将value的值赋给对应cf列族,name的列

删除数据的区别,在mysql中删除数据只能是直接删除一行,或者将某一列置为空,在hbase里面可以直接删除某一列

(3)索引的区别

在mysql中可以建立索引,或者过滤查询,但是在hbase中,只支持按照rowkey进行查询速率最快

(4)从mysql到nosql的发展的思考

关系型数据库的历史已经很久,但是当数据量膨胀之后,例如对于mysql数据库,当数据量为上亿或者更多的时候,如果按照索引进行查询,可能效果 也不是特别的明显,最后只能按照主键进行查询,或者逐渐发展为分库分表的模式,但是分库分表又给运维以及使用带来了很大的麻烦;于是这个时候,nosql数据库主键发展,nosql简称not only sql,是在数据量暴增的当前逐渐发展壮大起来,以nosql里面的hbase作为例子,支持TB以及PB的数据,并且列的扩展特别的灵活

(5)hbase为什么可以存储海量的数据呢

其实hbase可以看做是mysql分库分表后的结果,只是不同的是mysql分库分表后支持索引等,但是对于hbase仅仅支持rowkey作为主键索引,从书中可以知道,hbase的数据是按照列进行存储的,并且当数据过大的时候,会按照行进行分裂,如下如所示:



把不同的region放到了不同的机器,并且最后还有master进行管理,即相当于对行列进行了一个划分,从而存储大量的数据

三、数据迁移遇到的一些问题

(1)联合索引的问题

在mysql中会有一些联合索引的情况,例如存在一个商品与分类对应关系的表,需要得到某一个商品的所有分类,也希望可以得到某一个分类的所有商品,在mysql中直接按照联合索引可以达到要求,但是在hbase的时候只能按照rowkey查询如何办呢

经过阅读相关的数据得到有如下两种的解决办法

1、构建宽表

在hbase中,允许行跟行之间的列是不同的,只要有共同的列族即可,那么对于上述的情况,可以构建一个按照分类为rowkey的宽表,如下所示

分类id,作为rowkey

product_id,作为列名字

value存储为是否删除


上述即可rowkey为分类id,可以直接从row得到所有的product_id,然后自己过滤是否删除

2、构建高表

什么是构建高表呢,也就是说不需要那么多的列,只是存储多行,因为在hbase里面是按照字典顺序排序的,因此可以进行如下的设计

分类id_商品id,作为rowkey


只要scan以1开头的行,就可以得到所有的数据

上述两种办法从本质上来说,都是构建了一个二级索引来存储数据

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05sql存储过程获取汉字拼音头字母函数
  • 2018-12-05一个比较复杂的多次拆分字符串的存储过程
  • 2018-12-05MySQL使用一个语句就可以查出各种整形占用字节数及最大最小值的示例代码
  • 2017-05-11MyEclipse连接MySQL数据库报错解决办法
  • 2017-05-11sql格式化工具集合
  • 2018-12-05sql注入实例以及如何防sql注入
  • 2017-05-11关于Mysql查询带单引号及插入带单引号字符串问题
  • 2018-12-05MySQL安全性指南(3)(转)
  • 2018-12-05tpcc-mysql安装测试与使用的实例教程
  • 2018-12-05MySQL 解密 --> 如何查看二进制日志ROW模式下最原始的SQL语句

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 数据库中的内容字段被挂马的替换方法 SQL注入
    • Mysql中的事务是什么如何使用
    • 关于mysql学习之权限管理详解
    • MySQL Order By语法介绍
    • 有关投稿的文章推荐10篇
    • 如果修改mysql数据库的密码?
    • sqlserver 索引的一些总结
    • 解析MySQL高速缓存启动方法及参数(query_cache_size)
    • MySQL 5.7 学习心得之安全相关特性_MySQL
    • MYSQL表优化方法小结 讲的挺全面

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有