一、进行迁移的原因

由于业务的发展,使用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开头的行,就可以得到所有的数据
 
上述两种办法从本质上来说,都是构建了一个二级索引来存储数据
 
【github开源地址:https://github.com/molong1208,欢迎关注,指点交流】
 

数据从mysql迁移到hbase的一些思考及设计的更多相关文章

  1. 将数据从MySQL迁移到Oracle的注意事项

    将数据从MySQL迁移到Oracle的注意事项1.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动 ...

  2. 数据从mysql迁移至oracle时知识点记录(一)

    最近在做数据的迁移,再将数据从mysql迁移至oracle时,部分sql语句进行了修改,在此对部分知识点进行记录: 参考资料:https://dev.mysql.com/doc/refman/5.5/ ...

  3. mysql迁移mpp数据库Greenplum

    1. 场景描述 因兄弟项目中mysql有点扛不住了,要做sql优化,但是业务有点小复杂,优化起来有点麻烦(sql嵌套有点多),便想着用Mpp数据库Greenplum测试下,看性能和复杂度怎么样,趟趟水 ...

  4. mongodb数据迁移到hbase

    mongodb数据迁移到hbase 导入包 # encoding: utf-8 ''' @author: zcc @license: (C) Copyright 2013-2017, Node Sup ...

  5. finedb(内置的HSQL数据库)迁移数据到MySQL

    finedb(内置的HSQL数据库)迁移数据到MySQL 1. 前言 在FineBI中,决策平台的数据(用户.角色.组织机构.权限等信息)是存储在finedb数据库中的,默认情况下finedb是一个内 ...

  6. mysql迁移之巨大数据量快速迁移方案

    mysql迁移之巨大数据量快速迁移方案-增量备份及恢复 --chenjianwen 一.前言: 当mysql库的大小达到几十个G或者上百G,迁移起来是一件非常费事的事情,业务中断,导出导入耗费大量的时 ...

  7. Oracle数据迁移至HBase操作记录

    Oracle数据迁移至HBase操作记录 @(HBase) 近期需要把Oracle数据库中的十几张表T级别的数据迁移至HBase中,过程中遇到了许多苦难和疑惑,在此记录一下希望能帮到一些有同样需求的兄 ...

  8. Mysql学习总结(35)——Mysql两千万数据优化及迁移

    最近有一张2000W条记录的数据表需要优化和迁移.2000W数据对于MySQL来说很尴尬,因为合理的创建索引速度还是挺快的,再怎么优化速度也得不到多大提升.不过这些数据有大量的冗余字段和错误信息,极不 ...

  9. (MySQL里的数据)通过Sqoop Import HBase 里 和 通过Sqoop Export HBase 里的数据到(MySQL)

    Sqoop 可以与HBase系统结合,实现数据的导入和导出,用户需要在 sqoop-env.sh 中添加HBASE_HOME的环境变量. 具体,见我的如下博客: hadoop2.6.0(单节点)下Sq ...

随机推荐

  1. 类1(this指针/const成员函数/类作用域/外部成员函数/返回this对象的函数)

    假设我们要设计一个包含以下操作的 Sales_data 类: 1.一个 isbn 成员函数,用于返回对象的 book_no 成员变量 2.一个 combine 成员函数,用于将一个 Sales_dat ...

  2. ueditor的bug

    1)过滤script style标签ueditor.all.jsallowDivTransToP:false ueditor.config.js,allowDivTransToP:false //允许 ...

  3. 下载azure website的code

    1.登陆kudu直接下载. http://www.concurrency.com/blog/use-azure-kudu-debug-azure-websites/ 2.FTP链接拷贝(可以忽略) 3 ...

  4. hexo博客的相关配置

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 前面两节讲解了hexo博客的搭建以及jacman主题的配置,这节主要讲解博客的一些相关配置.比如404页面,图床,自定义页面,个人网站绑定(重要的 ...

  5. 从pg_hba.conf文件谈谈postgresql的连接认证

    最近一直在弄postgresql的东西,搭建postgresql数据库集群环境什么的.操作数据库少不得要从远程主机访问数据库环境,例如数据库管理员的远程管理数据库,远程的客户存取数据库文件. 而在po ...

  6. 【问题记录】在执行js的时候报错:missing ) after argument list

    在执行个js语句时候报错: 报错语句: js('document.querySelector("[class] [tabindex='0']:nth-child(2) span") ...

  7. [HNOI2006]公路修建问题 BZOJ1196 Kruskal

    题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 输入输出样例 输入样例#1: 复制 4 2 5 1 2 6 5 1 3 3 1 2 3 9 4 2 4 6 1 输出 ...

  8. matlab中的linkage和cluster函数

    Linkage: Agglomerative hierarchical cluster tree(凝聚成层次聚类树) 语法: 解释: Z=linkage(x),返回Z,是一个X矩阵中行的分层聚类树(用 ...

  9. JAVA数据结构--LinkedList双向链表

    链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个部分: ...

  10. 【算法笔记】B1018 锤子剪刀布

    1018 锤子剪刀布 (20 分) 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. ...