返回顶部
首页 > 资讯 > 数据库 >快速理解HBase和BigTable
  • 857
分享到

快速理解HBase和BigTable

2024-04-02 19:04:59 857人浏览 泡泡鱼
摘要

有关系行数据库经验的人(比如我),在最初接触HBase这样的数据库时,对数据结构的理解容易遇到障碍。会不自觉的将HBase的行、列等概念映射成关系型数据库的行、列。为了加速理解HBase的一些概念,翻译了这

有关系行数据库经验的人(比如我),在最初接触HBase这样的数据库时,对数据结构的理解容易遇到障碍。会不自觉的将HBase的行、列等概念映射成关系型数据库的行、列。为了加速理解HBase的一些概念,翻译了这篇文章《Understanding HBase and BigTable》(HBase官方文档推荐阅读文章)。

学习Hbase(Google BigTable的开源实现)最困难的是理解它的实际概念。

很不幸的是,这两个伟大的系统在其概念中包含了table和base两个词,这往往会导致一些人(比如我) 把它们跟关系型数据库的东西搞混淆。

本文旨在从概念的角度描述这些分布式数据存储系统。阅读之后,你应该能够更好地判断,什么时候要使用Hbase,什么时候该更好地使用“传统”数据库。

一切都在术语中

幸运的是,Google的BigTable论文清楚地解释了BigTable究竟是什么。这是“数据模型”部分的第一句话: 

快速理解HBase和BigTable

注意:请牢记上边这句话的每一个词

BigTable论文继续说明 

快速理解HBase和BigTable

hadoop wiki的HbaseArchitecture页面假设:

快速理解HBase和BigTable

尽管所有这些看起来都相当神秘,但是一旦你将它分解为单词,它就变得容易明确了。我喜欢按照这个顺序讨论它们:map,持久化(persistent),分布式(distributed),有序(sorted),多维(multidimensional)和稀疏(sparse)。

我没有尝试一下子描绘完整的系统,而是发现在脑海中构建一个零碎的框架更容易理解HBase……

Map

Hbase / BigTable的核心是map,根据您的编程语言背景,您可能更熟悉这些术语,array (PHP), dictionary (python), Hash (Ruby), or Object (javascript).

维基百科文章显示,Map是“由一组键和一组值组成的抽象数据类型,其中每个键与一个值相关联。”

JSON来描述一个简单Map的示例,其中所有值都只是字符串: 

快速理解HBase和BigTable

持久化

持久化仅仅意味着在创建或访问数据的程序完成后,您放入此特殊Map的这些数据“会持久保存”。这在概念上与任何其他类型的持久存储(例如文件系统上的文件)没有什么不同。

有序

与大多数Map实现不同,在Hbase / BigTable中,键/值对按严格的字母顺序保存。也就是说,键“aaaaa”的行应该在具有键“aaaab”的行旁边,并且与具有键“zzzzz”的行相距很远。

继续我们的jsON示例,有序版本如下所示: 

快速理解HBase和BigTable

由于这些系统往往非常庞大且是分布式,因此这种有序的特性非常重要。具有相似键的行在空间上的邻近性确保了当您必须扫描表时,您最感兴趣的条目彼此接近。

选择行键的约定很重要。例如,考虑一个表,其键是域名。以反向表示法列出它们是最有意义的(所以“com.jimbojw.www”比“www.jimbojw.com”更好),这样子域的行(存储上)将靠近父域行。

值得注意的是,在Hbase / BigTable中,术语“有序”并不意味着“值(values)”已排序。除了键之外,没有任何自动索引,就像在普通Map实现中一样。

多维

到目前为止,我们还没有提到任何“列(columns)”的概念,将“表(table)”视为概念中的常规哈希/映射(map)。这是有意为之。 “列(column)”这个词是另一个加载的词,如“table”和“base”,它传承了多年关系型数据库经验的情感包袱。

相反,我发现(把HBase)看成一个多维Map更容易思考这个问题 - 如果你愿意的话,可以使用嵌套Map。在之前的JSON示例中添加一个维度: 

快速理解HBase和BigTable

在上面的例子中,您现在会注意到每个键都指向一个有两个键的Map:“A”和“B”。从此处开始,我们将顶层键/映射(key/map)称为“行”。此外,在BigTable / Hbase命名法中,“A”和“B”映射(mappings)将被称为“列族”。

创建表时会指定表的列族,以后很难或无法修改。添加新列族代价也很大,因此好的做法是从一开始就指定您需要的所有列族。

幸运的是,列族可以具有任意数量的列,由列“限定符(qualifier)”或“标签(label)”表示。以下是我们的JSON示例的子集,内置了列限定符维度(qualifier dimension): 

快速理解HBase和BigTable

请注意,在显示的两行中,“A”列族有两列:“foo”和“bar”,“B”列族只有一列,其限定符为空字符串(“”)。

在向Hbase / BigTable询问数据时,必须以“<family>:<qualifier>”的形式提供完整的列名称。因此,例如,上例中的两行都有三列:“A:foo”,“A:bar”和“B:”。

请注意,虽然列族是静态的,但列本身不是。考虑这个扩展的行: 

快速理解HBase和BigTable


在这种情况下,“zzzzz”行只有一列,“A:catch_phrase”。由于每行可能包含任意数量的不同列,因此没有内置方法可以查询所有行中所有列的数据(list)。要获取该信息,您必须进行全表扫描。但是,您可以查询所有列族的数据,因为它们是不可变的(或多或少)。

Hbase / BigTable中最后一个维度是时间。所有数据都使用整数时间戳(seconds since the epoch)或您选择的另一个整数进行版本控制。客户端可以在插入数据时指定时间戳。

看一下使用任意整数时间戳的示例: 

快速理解HBase和BigTable

每个列族可能有自己的规则,确定保留的给定单元格的版本数量(单元格由其rowkey / column键值对标识)在大多数情况下,应用程序将只询问给定单元格的数据,而不指定时间戳。在这种常见情况下,Hbase / BigTable将返回最新版本(具有最高时间戳的版本),因为它以时间逆序存储这些版本数据。

如果应用程序指定时间戳,Hbase将返回时间戳小于或等于所提供时间戳的单元数据。

使用我们想象中的Hbase表,查询“aaaaa”/“A:foo”的行/列(row/column)将返回“y”,同时查询“aaaaa”/“A:foo”/ 10的 行/列/时间戳 将返回“M”。查询“aaaaa”/“A:foo”/ 2的 行/列/时间戳 将返回空结果。

稀疏

最后一个关键字是稀疏。如前所述,给定行在每个列族中可以包含任意数量的列,或者根本不包含任何列。另一种类型的稀疏性是基于行的间隙(row-based gaps),这仅仅意味着键(key)之间可能存在间隙。

如果您已经按照本文的基于映射(map-based)的术语来思考Hbase / BigTable,而不是用关系型数据库中的相似概念去思考,那么本文的目的就达到了。

就这样(And that's about it)

好吧,我希望这有助于您从概念上理解Hbase数据模型的含义。

一如既往,我期待着您的想法,意见和建议。 

您可能感兴趣的文档:

--结束END--

本文标题: 快速理解HBase和BigTable

本文链接: https://lsjlt.com/news/49096.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 快速理解HBase和BigTable
    有关系行数据库经验的人(比如我),在最初接触HBase这样的数据库时,对数据结构的理解容易遇到障碍。会不自觉的将HBase的行、列等概念映射成关系型数据库的行、列。为了加速理解HBase的一些概念,翻译了这...
    99+
    2024-04-02
  • Cassandra和HBase中怎样使用的BigTable模型
    这篇文章将为大家详细讲解有关Cassandra和HBase中怎样使用的BigTable模型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。众所周知,BigTa...
    99+
    2024-04-02
  • 【从零单排HBase 01】从一无所知到5分钟快速了解HBase
    在学的过程中,发现跟MySQL相互对比,能更深入地了解存储组件的设计。有任何问题或者想看的知识点,欢迎留言跟我沟通。 1.前言 随着公司业务不断发展,开始遇见越来越多的复杂存储场景。我们在关系型数据库上已经有了比较好的技术积累,但...
    99+
    2015-02-03
    【从零单排HBase 01】从一无所知到5分钟快速了解HBase
  • hbase快速入门知识点有哪些
    这篇文章主要讲解了“hbase快速入门知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“hbase快速入门知识点有哪些”吧!1.Hbase是什么Apache HBase是Hadoop...
    99+
    2023-06-02
  • 快速理解Mybatis-plus中BaseMapper、IService和ServiceImpl
    一、介绍 在使用Mybatis-plus(MP)中,我们主要会用到BaseMapper、IService和ServiceImpl,但一直以来都是照猫画虎的使用,对三者的关系一直比较迷糊。 本文将从持久层Mapper和业务层Service对三...
    99+
    2023-08-17
    mybatis java 开发语言
  • 如何快速理解git
    本篇内容主要讲解“如何快速理解git”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何快速理解git”吧!安装Git,并设置名称及邮箱Git可以在官网 https://git-scm.com/d...
    99+
    2023-07-05
  • 如何快速理解HTML5新增元素和css
    本篇内容介绍了“如何快速理解HTML5新增元素和css”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  ...
    99+
    2024-04-02
  • 必会技能!Docker助你快速上手玩转HBase!
    前言:本文主要讲述了如何使用Docker快速上手HBase,省去繁杂的安装部署环境,直接上手,小白必备。适合HBase入门学习及简单代码测试。 1. Docker 安装 参考地址: https://yeasy.gitbook.io...
    99+
    2016-01-29
    必会技能!Docker助你快速上手玩转HBase!
  • 快速理解Java垃圾回收和jvm中的stw
    Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与J...
    99+
    2023-05-31
    java jvm ava
  • 一文带你快速理解git
    随着软件开发的快速发展,版本控制也逐渐成为一个重要的话题。Git是目前最受欢迎的版本控制系统之一,它为程序员提供了一种有效的方法来跟踪代码的更改历史记录、协作开发以及管理不同的版本,尽管Git对于初学者可能略显复杂,但只要你按照以下步骤可以...
    99+
    2023-10-22
  • 通俗易懂 快速理解 JDK动态代理 和 cglib动态代理
    动态代理的实现方案有两种,JDK动态代理和CGLIB动态代理,区别在于JDK自带的动态代理,必须要有接口,而CGLIB动态代理有没有接口都可以。 JDK动态代理:JDK原生的实现方式,需要被代理的...
    99+
    2023-10-21
    java spring
  • pytorch中torch.topk()函数的快速理解
    目录函数作用:举个栗子:实例演示总结函数作用: 该函数的作用即按字面意思理解,topk:取数组的前k个元素进行排序。 通常该函数返回2个值,第一个值为排序的数组,第二个值为该数组...
    99+
    2024-04-02
  • 怎么快速理解PHP过滤器
    这篇文章主要介绍“怎么快速理解PHP过滤器”,在日常操作中,相信很多人在怎么快速理解PHP过滤器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么快速理解PHP过滤器”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-25
  • HBase的Hlog原理解析
    // to do ...
    99+
    2024-04-02
  • Hbase体系结构理解
    1. Hbase的集群架构    首先hbase是hadoop的一个组件.而hadoop内部有很多的组件,这些组件几乎都依赖于hadoop最核心的两个东西建立起来的,一个是hdfs文件系...
    99+
    2024-04-02
  • 如何理解MySQL全面快速优化
    这期内容当中小编将会给大家带来有关如何理解MySQL全面快速优化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 0、导读全面的MySQL快速优化参考 这里整理了一些M...
    99+
    2024-04-02
  • C++快速排序算法简明理解
    目录一、问题描述二、想法三、算法实现总结一、问题描述 [问题] 应用快速排序方法对一个记录序列进行升序排列。快速排序(quick sort)的分治策略如下。 (1)划分:选定一个记录...
    99+
    2024-04-02
  • 如何快速理解MySQL核心技术?
    如何快速理解MySQL核心技术?MySQL是一种常用的关系型数据库管理系统,广泛应用于各种应用程序和网站开发中。理解MySQL的核心技术对于数据库开发和管理非常关键。本文将介绍一些快速理解MySQL核心技术的方法和建议。首先,了解MySQL...
    99+
    2023-10-22
    MySQL 数据库 核心技术
  • 快速理解Vue路由导航守卫
    目录一、全局守卫 1.全局前置守卫 2.全局解析守卫 3.全局后置钩子 三、路由独享的守卫 四、组件内的守卫 五、一个完整的导航解析流程 概念: “导航”表示路由正在发生变化 vue...
    99+
    2024-04-02
  • 快速了解Spring Boot
    今天给大家介绍一下Spring Boot MVC,让我们学习一下如何利用Spring Boot快速的搭建一个简单的web应用。环境准备一个称手的文本编辑器(例如Vim、Emacs、Sublime Text)或者IDE(Eclipse、Ide...
    99+
    2023-05-30
    spring boot 快速入门
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作