1 主要区别

1.1、Hbase适合大量插入同时又有读的情况

1.2、 Hbase的瓶颈是硬盘传输速度,Oracle的瓶颈是硬盘寻道时间。

Hbase本质上只有一种操作,就是插入,其更新操作是插入一个带有新的时间戳的行,而删除是插入一个带有插入标记的行。其主要操作是收集内存中一批数据,然后批量的写入硬盘,所以其写入的速度主要取决于硬盘传输的速度。Oracle则不同,因为他经常要随机读写,这样硬盘磁头需要不断的寻找数据所在,所以瓶颈在于硬盘寻道时间。

1.3、Hbase很适合寻找按照时间排序top n的场景

1.4、索引不同造成行为的差异。

1.5、Oracle 既可以做OLTP又可以做OLAP,但在某种极端的情况下(负荷十分之大),就不适合了。

2 Hbase的局限:

1、只能做简单的Key value查询,复杂的sql统计做不到。

2、只能在row key上做快速查询。

3 传统数据库的行式存储

在数据分析的场景里面,我们经常是以某个列作为查询条件,返回的结果经常也只是某些列,不是全部的列。行式数据库在这种情况下的I/O性能会很差,以Oracle为例,Oracle会有一个很大的数据文件,在这个数据文件中,划分了很多block,然后在每个block中放入行,行是一行一行放进去,挤在一起,然后把block塞满,当然也会预留一些空间,用于将来update。这种结构的缺点是:当我们读某个列的时候,比如我们只需要读红色标记的列的时候,不能只读这部分数据,我必须把整个block读取到内存中,然后再把这些列的数据取出来,换句话说,我为了读表中某些列的数据,我必须把整个列的行读完,才可以读到这些列。如果这些列的数据很少,比如1T的数据中只占了100M, 为了读100M数据却要读取1TB的数据到内存中去,则显然是不划算。

3.1 B+索引

Oracle中采用的数据访问技术主要是B数索引:

从树的跟节点出发,可以找到叶子节点,其记录了key值对应的那行的位置。

对B树的操作:

B树插入——分裂节点

B数删除——合并节点

4 列式存储


同一个列的数据会挤在一起,比如挤在block里,当我需要读某个列的时候,值需要把相关的文件或块读到内存中去,整个列就会被读出来,这样I/O会少很多。

同一个列的数据的格式比较类似,这样可以做大幅度的压缩。这样节省了存储空间,也节省了I/O,因为数据被压缩了,这样读的数据量随之也少了。

行式数据库适合OLTP,反倒列式数据库不适合OLTP。

4.1 BigTable的LSM(Log Struct Merge)索引

在Hbase中日志即数据,数据就是日志,他们是一体化的。为什么这么说了,因为Hbase的更新时插入一行,删除也是插入一行,然后打上删除标记,则不就是日志吗?

在Hbase中,有Memory Store,还有Store File,其实每个Memory Store和每个Store File就是对每个列族附加上一个B+树(有点像Oracle的索引组织表,数据和索引是一体化的), 也就是图的下面是列族,上面是B+树,当进行数据的查询时,首先会在内存中memory store的B+树中查找,如果找不到,再到Store File中去找。

如果找的行的数据分散在好几个列族中,那怎么把行的数据找全呢?那就需要找好几个B+树,这样效率就比较低了。所以尽量让每次insert的一行的列族都是稀疏的,只在某一个列族上有值,其他列族没有值,

Hbase与Oracle比较(列式数据库与行式数据库)相关推荐

  1. 列式数据库与行式数据库

    什么是列式数据库? 列式数据库是以列相关存储架构进行数据存储的数据库.卢东明认为数据库发展已经到了一个新阶段,数据库市场需要细分,行式数据库不再满足所有的需求,而有很多需求需要通过内存数据库和列式数据 ...

  2. 为什么MaxCompute采用列式存储?列式存储和行式存储的主要区别在哪

    摘要: 1 为什么要按列存储 列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的.简单来说两者的区别就是如何组织表 ...

  3. 什么是列式存储和行式存储

    一.列式存储和行式存储 列式存储是指一列中的数据在存储介质中是连续存储的: 行式存储是指一行中的数据在存储介质中是连续存储的. 简单的说,可以把列式数据库认为是每一列都是一个表,这个表只有一列,如果只 ...

  4. 列式存储和行式存储它们真正的区别是什么

    本文是<Column-Stores vs. Row-Stores: How Different Are They Really?>论文的读后感,作者徐明明.原文链接:https://zhu ...

  5. 列式存储和行式存储的真正区别

    1 列式存储和行式存储的真正区别 参考文献: 列式存储和行式存储的真正区别_过往记忆大数据_公众号文章 一般原因:查询需要的字段时,Column-Store 只需读取需要的列,Row-Store读一条 ...

  6. 列式数据库和行式数据库的区别

    前言 最近学习了hbase,其中涉及的到知识就是hbase采用了列式存贮,而用惯了mysql的我当然一脸懵逼,于是有了本篇文章,本文不是论文,所有涉及的知识点他人都有讲,我只是为了记录一下,如果想要看 ...

  7. 列式数据库和行式数据库区别

    转载自:https://blog.csdn.net/nieson2012/article/details/79551337 列存储不同于传统的关系型数据库,其数据在表中是按行存储的,列方式所带来的重要 ...

  8. DataBase_数据库的行式存储与列式存储

    存储差异 行式存储:以行为单位进行存储,存储在连续的物理内存上 列式存储:以列为单位进行存储,存储在连续的物理内存上 读取差异 animal表: name age color Tom one blue ...

  9. 列式存储和行式存储有什么区别?

    写在前面 本文隶属于专栏<100个问题搞定大数据理论体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定大数据理 ...

最新文章

  1. 枚举算法 C语言 试题,求代码:如图大体思路是,用枚举法,一个个的试,碰到非的情况从...
  2. 软引用、弱引用、 java
  3. 从代码角度揭示:华为鸿蒙的“套壳”真相!
  4. tomcat ajp协议安全限制绕过漏洞_Apache Tomcat文件包含漏洞(CVE20201938)复现
  5. atomic在linux编译不通过,内存障碍和在linux上的atomic_t
  6. 让你又爱又恨的推荐系统--程序猿篇
  7. python wraps模块_python functools.wraps装饰器模块
  8. TSC TTP-244 Pro标签打印机安装说明
  9. 数据分析系列:Z 检验和 T 检验的应用及代码实现
  10. 记账软件如何查看收入支出
  11. 手机联系人分组名字都没了_这个你连名字都没听过的城市,深藏着江西美食的功与名...
  12. 表格制作过程html,HTML进行表格制作
  13. 关于fuse的常用启动参数
  14. iPhone4S安装Linux系统,Ubuntu系统下iPhone4S降级6.1.3教程
  15. 5.4节呈献:HP-Socket v5.3.1 发布 — 支持 Android NDK
  16. C++编程学习52个经典网站 强力推荐
  17. ubuntu20.04开机进入emergency mode解决办法
  18. jmeter tcp长连接性能测试
  19. pyspark进行词频统计并返回topN
  20. Ubuntu 20.04桌面版 安装Antlr4

热门文章

  1. R329开发板根目录 ls 命令文件和文件名乱码其他目录不乱码问题解决
  2. 关于数据安全及保密(基于大数据板块的整理)
  3. 51单片机学习笔记(清翔版)(25)——LCD1602和指针
  4. 不干胶标签的印刷工艺
  5. java 搭建http服务器_搭建简单的HTTP服务器
  6. 运用Xmap将xml数据转换成javabean
  7. 【中文】Joomla1.7扩展介绍之Xmap(站点地图生成)
  8. 浅析新媒体运营工作内容
  9. 利用RunLoop空闲时间执行预缓存任务
  10. Linux——samba服务器部署