你的位置:必威体育 > 易学知识 >

半结构化:具有一定结构

  自 1970 年以来,关系数据库用于数据存储和维护有关问题的解决方案。大数据的出现后,好多公司实现处理大数据并从中受益,并开始选择像 Hadoop 的解决方案。Hadoop 使用分布式文件系统,用于存储大数据,并使用 MapReduce 来处理。Hadoop 擅长于存储各种格式的庞大的数据,任意的格式甚至非结构化的处理。

  Hadoop 只能执行批量处理,并且只以顺序方式访问数据。这意味着必须搜索整个数据集,即使是最简单的搜索工作。当处理结果在另一个庞大的数据集,也是按顺序处理一个巨大的数据集。在这一点上,一个新的解决方案,需要访问数据中的任何点(随机访问)单元。

  对于任意格式的庞大数据集,Hadoop 可以做到安全存储但是对于需要在庞大数据集做针对于单条记录的增删改查是做不到的。

  对于存储在 HDFS 上的结构化的数据,如果增加一些描述这些数据的元数据信息,那么我们可以把存储在 HDFS 上的数据抽象成一张二维表格,使用 Hive 进行各种 Insert/Select 操作。但是 Hive 还是天生不支持对于单条记录的增删改查,也不是设计用来做单条记录的增删改查的。

  3)随着数据规模越来越大,大量业务场景开始考虑数据存储横向水平扩展,使得存储服务可以增加/删除,而目前的关系型数据库更专注于一台机器。

  重要问题探讨:如何设计一个能存储庞大数据集,同时也能做到实时增删改查的数据库系统?相当于设计一个 MySQL 的分布式版本。

  先解决这个问题,再来学习别人的成果,这是一种较好的学习方式。而不是一上来便学习别人的成功。须知:已掌握的知识会限制我们的思维方式。

  2、是否能找到一种合适的数据结构和搜索算法能快速从一个数据集中找出一个元素?二分查找

  HBase 是 BigTable 的开源(源码使用 Java 编写)版本。是 Apache Hadoop 的数据库,是建立在 HDFS 之上,被设计用来提供高可靠性、高性能、列存储、可伸缩、多版本的 NoSQL的分布式数据存储系统,实现对大型数据的实时、随机的读写访问。

  与 Hadoop 一样,HBase 目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。所以,HBase 是一个通过大量廉价机器解决海量数据的高速存储和读取的分布式数据库解决方案

  ② HBase 本质依然是 Key-Value 数据库,查询数据功能很简单,不支持 join 等复杂操作(可通过 Hive 支持来实现多表 join 等复杂操作)

  ④ HBase 中支持的数据类型:byte[](底层所有数据的存储都是字节数组)

  半结构化:具有一定结构,但语义不够确定,典型的如 HTML 网页,有些字段是确定的(title),有些不确定(table)

  2、面向列:列可以灵活指定,面向列(族)的存储和权限控制,列(簇)独立检索。

  3、稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

  1、RDBMS 完全可以抽象成是一张二维表格,表由行和列组成。由行和列确定一个唯一的值

  与 NoSQL 数据库们一样,RowKey 是用来检索记录的主键。访问 HBase Table 中的行,只有三种方式:

  存储时,数据按照 RowKey 的字典序(byte order)排序存储。设计 Key 时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)

  行的一次读写是原子操作(不论一次读写多少列)。这个设计决策能够使用户很容易的理解程序在对同一个行进行并发更新操作时的行为。

  HBase 表中的每个列,都归属与某个列簇。列簇是表的 Schema 的一部分(而列不是),必须在创建表的时候指定。指定好了列簇就不能更改。列簇可以增加或者删除,删除的时候会删除这个列簇中的所有数据。

  列名都以列簇作为前缀。例如 courses:history,courses:math 都属于 courses 这个列簇。访问控制、磁盘和内存的使用统计等都是在列簇层面进行的。

  列簇越多,在取一行数据时所要参与 IO、搜寻的文件就越多,所以,如果没有必要,不要设置太多的列簇,官网推荐是小于等于 3(最好就一个列簇)。

  HBase 中通过 RowKey 和 Column 确定的为一个存储单元称为 Cell。每个 Cell 都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64 位整型。时间戳可以由 HBase (在数据写入时自动)赋值,必威体育此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个Cell 中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。HBase 在查询的时候,默认返回最新版本/最近的数据。如果需要读取旧版本的数据,可以指定时间戳。

  为了避免数据存在过多版本造成的的管理(包括存储和索引)负担,HBase 提供了两种数据版本回收方式:

  对于数据结构字段不够确定或杂乱无章很难按一个概念去进行抽取的数据适合用 HBase。而且 HBase 是面向列的,HBase 支持动态增加字段

  RDBMS 的行有多少列是固定的,为 null 的列浪费了存储空间。而 HBase 为 null 的 Column是不会被存储的,这样既节省了空间又提高了读性能。

  对于需要存储变动历史记录的数据,使用 HBase 就再合适不过了。HBase 根据 Row key 和Column key 定位到的 Value 可以有任意数量的版本值。

  当数据量越来越大,RDBMS 数据库撑不住了,就出现了读写分离策略,通过一个 Master 专门负责写操作,多个 Slave 负责读操作,服务器成本倍增。随着压力增加,Master 撑不住了,这时就要分库了,把关联不大的数据分开部署,一些 join 查询不能用了,需要借助中间层。随着数据量的进一步增加,一个表的记录越来越大,查询就变得很慢,于是又得搞分表,比如按 ID 取模分成多个表以减少单个表的记录数。经历过这些事的人都知道过程是多么的折腾。采用 HBase 就简单了,只需要加机器即可,HBase 会自动水平切分扩展,跟 Hadoop 的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性(MapReduce)。

站长推荐

  • 本站内容均来自网络,如侵犯您的隐私(版权) 请联系站长:QQ

    Copyright © 2019 必威体育 版权所有 邮箱: