关系型数据库+NoSQL(非关系型数据库)+HBase+Hive 区别与联系

作者:邵兵
链接:https://www.zhihu.com/question/21677041/answer/22393192
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1. RDBMS(传统关系型数据库)

让数据集保持在一台单一的机器上是RDBMS提供ACID特性和丰富查询模型的最好方式。但数据集变大时,垂直扩展(scaling up)带来诸多限制。企业慢慢发现,通过增加多节点的服务器进行横向扩展(scaling out)是一种更经济和更可行的方式。DBA们对RDBMS采用的横向扩展的方法主要有主从复制(Master-slave)、分片(Sharding)。

横向扩展RDBMS – Master/Slave
  • 利用数据库的复制或镜像功能,同时在多台数据库上保存相同的数据,并且将读操作和写操作分开,写操作集中在一台主数据库上,读操作集中在多台从数据库上。复制过程的速度与系统中的从节点数量成反比。
  • 关键的读取可能不正确,因为写可能没有来得及被向下传播;
  • 大数据集可能会造成问题,因为主节点需要将数据复制到从节点;

横向扩展RDBMS - Sharding
  • 通常来说,在满足ACID特性的数据库中进行扩展是非常难的。基于这个原因,对数据进行扩展,这个数据库本身就必须拥有简单的模型,将数据分割为N片,然后在单独的片中执行查询。数据分割的单元被称为“shard”。将N片数据分配个M个DBMS进行操作。DBMS并不会去管理数据片,这需由服务开发者自行完成。
  • 不同的分片方法有:
- 垂直分区(Vertical Partitioning):将不需要进行联合查询的数据表分散到不同的数据库服务器上。
- 水平分区(sharding/分表) 将同一个表的记录拆分到不同的表甚至是服务器上,这往往需要一个稳定的算法来保证读取时能正确从不同的服务器上取得数据。比如,将ZIP codes小于50000的客户存储在CustomersEast,将ZIP codes大于或等于50000的客户存储在CustomersWest。CustomersEast和CustomersWest就成为两个分区表。方法有 Range-Based Partitioning, Key or Hash-Based partitioning等。
  • 优点与不足

- 对读取和写入都有很好的扩展
- 不透明,应用需要做到可识别分区
- 不再有跨分区的关系/joins
- 跨片参照完整性损失

其他RDBMS扩展方法
  • Multi-Master replication:所有成员都响应客户端数据查询。多主复制系统负责将任意成员做出的数据更新传播给组内其他成员,并解决不同成员间并发修改可能带来的冲突。
  • INSERT only, not UPDATES/DELETES:数据进行版本化处理。
  • No JOINs, thereby reducing query time:Join的开销很大,而且频繁访问会使开销随着时间逐渐增加。非规范化(Denormalization)可以降低数据仓库的复杂性,以提高效率和改善性能。
  • In-memory databases:磁盘数据库解决的是大容量存储和数据分析问题,内存数据库解决的是实时处理和高并发问题。主流常规的RDBMS更多的是磁盘密集型,而不是内存密集型。
///

水平扩展

通常来说,可扩展性是指系统或服务在资源增加时所体现出的一种属性,其性能根据所增加资源的数量成比例地提高。

集中式系统和分布式系统都可以实现扩展。在集中式系统中,垂直扩展(也称按比例增加)通过增加现有或较少资源的数量或能力实现。在分布式系统中,例如云计算所采用的系统,水平扩展通过增加更多的计算单元(如服务器等)实现。除了提供更好的性能,水平扩展还用于实现松耦合系统的冗余和可靠性。因此,分布式系统拥有更好的伸缩性,能够容忍某些资源节点的故障,这种确保可靠地实现水平扩展的能力,是云计算成功的一个重要因素。

一般来说,垂直扩展更容易实现,不过成本更高。另外,垂直扩展存在单点失效的可能。而水平扩展通常成本更低,更加可靠,不过相对于垂直扩展而言更难实现。

水平扩展特别适合于Web 2.0,在这种环境下,当应用程序扩展时性能会相应下降。由于云计算中大多数应用程序都是数据密集型,因此通过数据库的水平扩展可以在很大程度上提升性能。这种扩展包括在多个服务器上进行数据库的复制。以下是一些Web 2.0数据库水平扩展方法。

缓存 将频繁访问的数据放在内存缓存中可以降低应用程序的响应时间,使用专门的缓存服务器来降低应用服务器的负载。

表级分割 将数据水平切片后,把数据分发到不同的数据库实例中。

分区 通过把数据集分散到跨多个物理服务器的更小单元,并通过在这些服务器间分割事务处理带宽来管理越来越多的应用程序。




2. NoSQL(非关系型数据库)

NoSQL现在被理解为 Not Only SQL 的缩写,是对非关系型的数据库管理系统的统称(正因为此,人们通常理解 NoSQL 是 anti-RDBMS)。

NoSQL 与 RDBMS 存在许多不同点,
- 最重要的是NoSQL不使用SQL作为查询语言。
- NoSQL 不需要固定的表模式(table schema),也经常会避免使用SQL的JOIN操作,一般有可水平扩展的特征。
- NoSQL产品会放宽一个或多个 ACID 属性(CAP定理)

CAP 理论
CAP理论是数据系统设计的基本理论,目前几乎所有的数据系统的设计都遵循了这个理论。CAP理论指出,分布式系统只能满足以下三项中的两项而不可能满足全部三项,
  • 一致性(Consistency)(所有节点在同一时间具有相同的数据)
  • 可用性(Availability)(保证每个请求不管成功或者失败都有响应)
  • 分区容忍性(Partition tolerance)(系统中任意信息的丢失或失败不会影响系统的继续运作)

一致性有两种类型:
- strong consistency – ACID(Atomicity Consistency Isolation Durability):对于关系型数据库,要求更新过的数据能被后续所有的访问都看到,这是强一致性。
- weak consistency – BASE(Basically Available Soft-state Eventual consistency )
-- Basically Available - system seems to work all the time (基本可用)
-- Soft State - it doesn't have to be consistent all the time (不要求所有时间都一致)
-- Eventually Consistent - becomes consistent at some later time (最终一致性)

对于分布式数据系统(scale out),分区容忍性是基本要求,否则就失去了价值。因此只能在一致性和可用性上做取舍,如何处理这种取舍正是目前NoSQL数据库的核心焦点。几乎所有的情况都是牺牲一致性而换取高可用性。当然,牺牲一致性,只是不再要求关系数据库中的强一致性,而是只要系统能达到最终一致性即可。考虑到客户体验,这个最终一致的时间窗口,要尽可能的对用户透明,也就是需要保障“用户感知到的一致性”。通常是通过数据的多份异步复制来实现系统的高可用和数据的最终一致性的。

3. HBase

HBase is an open-source, distributed, column-oriented database built on top of HDFS (or KFS) based on BigTable!

按照CAP理论,HBase属于C+P类型的系统。HBase是强一致性的(仅支持单行事务)。每一行由单个区域服务器(region server)host,行锁(row locks)和多版本并发控制(multiversion concurrency control)的组合被用来保证行的一致性。


4.HBase与Hive区别

作者:有点文
链接:https://www.zhihu.com/question/21677041/answer/185664626
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

先放结论:Hbase和Hive在大数据架构中处在不同位置,Hbase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,一般是配合使用。

区别:

  1. Hbase: Hadoop database 的简称,也就是基于Hadoop数据库,是一种NoSQL数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等。
  2. Hive:Hive是Hadoop数据仓库,严格来说,不是数据库,主要是让开发人员能够通过SQL来计算和处理HDFS上的结构化数据,适用于离线的批量数据计算。
  • 通过元数据来描述Hdfs上的结构化文本数据,通俗点来说,就是定义一张表来描述HDFS上的结构化文本,包括各列数据名称,数据类型是什么等,方便我们处理数据,当前很多SQL ON Hadoop的计算引擎均用的是hive的元数据,如Spark SQL、Impala等;
  • 基于第一点,通过SQL来处理和计算HDFS的数据,Hive会将SQL翻译为Mapreduce来处理数据;

关系:

在大数据架构中,Hive和HBase是协作关系,数据流一般如下图:

  1. 通过ETL工具将数据源抽取到HDFS存储;
  2. 通过Hive清洗、处理和计算原始数据;
  3. HIve清洗处理后的结果,如果是面向海量数据随机查询场景的可存入Hbase
  4. 数据应用从HBase查询数据;


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值