hbase实战——(1.1 nosql介绍)

什么是nosql

NoSQL(NoSQL = Not Only SQL),意思是不仅仅是SQL的扩展,一般指的是非关系型的数据库。

随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,传统的电信行业动辍就千万甚至上亿的数据,甚至有客户提出需要存储相关的日志数据50年以上,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。

关系型数据库难以克服的问题:

  • 不能很好处理对数据库高并发读写的需求
  • 不能很好处理对海量数据的高效率存储和访问的需求
  • 不能很好处理对数据库的高可扩展性和高可用性的需求

为什么使用nosql

SQL语言和关系型数据库(MySQL、PostgreSQL、Oracle等)是通用的数据解决方案,占有绝大多数的市场。但是就像上面提到的,它有很多难以解决的问题。不过在最近兴起的NoSQL运动中,涌现出一批具备高可用性、支持线性扩展、支持Map/Reduce操作等特性的数据产品,它们具有如下特性:

  • 频繁的写入操作、相对较少的读取统计信息的操作
  • 海量数据(如数据仓库中需要分析的数据)适合存储在一个结构松散、分布式的文件存储系统中
  • 存储二进制文件(如mp3或者pdf文档)并且能够直接为用户的浏览器提供下载功能

使用这些数据产品并不是要取代原有的数据产品,而是为不同的应用场景提供更多的选择。也就是说,在一些特定的情况下如果是关系型的数据库解决不了的问题,那么就可以考虑使用nosql,而不是说完全将应用移植到nosql上,毕竟适合才是最好的。

现在流行的nosql

下面对现在的nosql进行了整理,其中包括各种nosql的官方网站。

15个nosql数据库

HBase是什么

HBase是Apache Hadoop中的一个子项目,Hbase依托于Hadoop的HDFS作为最基本存储基础单元,通过使用hadoop的DFS工具就可以看到这些这些数据 存储文件夹的结构,还可以通过Map/Reduce的框架(算法)对HBase进行操作,如下图所示:

HBase在产品中还包含了Jetty,在HBase启动时采用嵌入式的方式来启动Jetty,因此可以通过web界面对HBase进行管理和查看当前运行的一些状态,非常轻巧方便。

HBase是Apache Hadoop中的一个子项目,现已成为Apache的顶级项目。

HBase是Google Bigtable(基于Google File System)的开源山寨版本。

为什么采用HBase

HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.所谓非结构化数据存储就是说HBase是基于列的而不是基于行的模式,这样方便读写你的大数据内容。

HBase是介于Map Entry(key & value)和DB Row之间的一种数据存储方式。就点有点类似于现在流行的Memcache,但不仅仅是简单的一个key对应一个 value,你很可能需要存储多个属性的数据结构,但没有传统数据库表中那么多的关联关系,这就是所谓的松散数据。

简单来说,你在HBase中的表创建的可以看做是一张很大的表,而这个表的属性可以根据需求去动态增加,在HBase中没有表与表之间关联查询。你只需要 告诉你的数据存储到Hbase的那个column families 就可以了,不需要指定它的具体类型:char,varchar,int,tinyint,text等等。但是你需要注意HBase中不包含事务此类的功能。

Apache HBase 和Google Bigtable 有非常相似的地方,一个数据行拥有一个可选择的键和任意数量的列。表是疏松的存储的,因此用户可以给行定义各种不同的列,对于这样的功能在大项目中非常实用,可以简化设计和升级的成本。

HBase的存储结构

HBase 是基于列的数据库,让我们看一下关系型数据库和hbase数据库存储的对比。

行式存储和列式存储对比:

行式存储

  • 数据是按行存储的
  • 没有索引的查询使用大量I/O
  • 建立索引和物化视图需要花费大量时间和资源
  • 面对查询的需求,数据库必须被大量膨胀才能满足性能要求

列式存储

数据按列存储——每一列单独存放

数据即是索引

只访问查涉及的列——大量降低系统IO

每一列由一个线索来处理——查询的并发处理

数据类型一致,数据特征相似——高效压缩

HBase与关系型数据库的对比

HBase 是基于

下面的表格中hbase和RDBMS的对比关系

HBase

RDBMS

数据类型

只有字符串

丰富的数据类型

数据操作

简单的增删改查

各种各样的函数,表连接

存储模式

基于列存储

基于表格结构和行存储

数据保护

更新后旧版本仍然会保留

替换

可伸缩性

轻易的进行增加节点,兼容性高

需要中间层,牺牲功能

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯Bugly的专栏

《手Q Android线程死锁监控与自动化分析实践》

手Q每个版本上线以后研发同学都会收到各种问题反馈。在跟进手Q内部用户反馈的问题时,发现多例问题,其表象和原因如下:

1.1K80
来自专栏服务端技术杂谈

快的打车架构实践

1.客户端与服务端通信会遇到哪些问题? 2.怎样基于Storm和HBase打造实时监控平台? 3.怎样对Web系统进行分布式改造? 快的打车从2013年年底到2...

38840
来自专栏杨建荣的学习笔记

datapump跨平台升级迁移的对比测试和优化 (r8笔记第81天)

目前计划对跨平台的数据库环境进行迁移,一来降低运维成本,二来更加可控。其实对于很多机器来说,如果机器跑了很多年,一直没有重启过,那么时间长了,一 个直...

374110
来自专栏Java架构

百度Java架构师分享分布式锁的技术选型及思考锁和分布式锁总结

24020
来自专栏CDA数据分析师

案例分析:基于消息的分布式架构

美国计算机科学家,LaTex的作者Leslie Lamport说:“分布式系统就是这样一个系统,系统中一个你甚至都不知道的计算机出了故障,却可能导致你自己的计算...

31380
来自专栏H2Cloud

游戏服务器设计之任务系统

游戏服务器设计之任务系统 介绍 任务系统是游戏中最重要的系统之一,本文旨在设计一个轻量清晰的任务系统。通用易扩展是本系统关注的重点。任务系统中当角色的条件满足时...

80440
来自专栏大宽宽的碎碎念

你对Redis的使用靠谱吗?Redis的性能高,吗?Redis可以保证原子性,吗?用Redis可以实现事务,吗?用Redis可以当队列,吗?Redis适合用来做什么?

681100
来自专栏ThoughtWorks

聊一聊契约测试 | 洞见

如果从契约产生的阶段来说,现有资料表明最早要追溯到西周时期的《周恭王三年裘卫典田契》,将契约文字刻写在器皿上,就是为了使契文中规定的内容得到多方承认、信守,“万...

15350
来自专栏deed博客

权限何必那么高

19440
来自专栏程序员的SOD蜜

唯一不变的就是一直在变”--“数据”的华丽“变身术”

 系列文章索引: [WCF邮件通信系统应用 之 数据同步程序 之 设计内幕 之 一] 同步一个数据库要发多少个数据包? [WCF邮件通信系统应用 之 数据同步...

22060

扫码关注云+社区

领取腾讯云代金券