Hadoop
第四章
HBase数据模型相关概念
HBase 数据模型

- 表(Table):HBase 使用表来组织数据。表由行和列组成,其中列被划分为若干列族。
- 行(Row):每个 HBase 表由若干行组成,每一行都通过唯一的 行键(Row Key) 进行标识。
- 列族(Column Family):HBase 表中的列会被划分到不同的列族中。列族是 HBase 中基本的存储和访问控制单元。
- 列限定符(Column Qualifier):列族中的具体数据通过列限定符进行定位。一个具体列可以表示为:
列族:列限定符
- 单元格(Cell):通过行键、列族和列限定符可以确定一个单元格。单元格中的数据没有固定的数据类型,统一以字节数组 byte[] 的形式存储。
- 时间戳(Timestamp):每个单元格可以保存同一份数据的多个版本,不同版本通过时间戳进行索引。
第五章
列族数据库
| 类别 | 内容 |
|---|---|
| 相关产品 | BigTable、HBase、Cassandra、HadoopDB、Greenplum、PNUTS |
| 数据模型 | 列族(Column Family) |
| 典型应用 | 分布式数据存储与管理;数据分布在多个地理位置或数据中心的应用程序;可以容忍副本之间短期不一致的应用程序;字段结构动态变化的应用程序;数据规模可能达到数百 TB 的应用程序 |
| 优点 | 查找速度快;可扩展性强;容易进行分布式扩展;系统复杂性相对较低 |
| 缺点 | 功能相对较少;大多数产品不支持强事务一致性 |
| 不适用情形 | 需要完整 ACID 事务支持的场景,例如 Cassandra 通常不适用 |
| 使用案例 | eBay:Cassandra;Instagram:Cassandra;NASA:Cassandra;Twitter:Cassandra、HBase;Facebook:HBase;Yahoo!:HBase |
文档数据库
| 类别 | 内容 |
|---|---|
| 相关产品 | MongoDB、CouchDB、Terrastore、ThruDB、RavenDB、SisoDB、RaptorDB、CloudKit、Persevere、Jackrabbit |
| 数据模型 | 键/值模型,其中值(Value)是版本化的文档 |
| 典型应用 | 存储、索引和管理面向文档的数据或半结构化数据;后台具有大量读写操作的网站;使用 JSON 数据结构的应用程序;使用嵌套结构等非规范化数据的应用程序 |
| 优点 | 性能好,适合高并发场景;灵活性高;复杂性低;数据结构灵活;支持嵌入式文档,可以将经常一起查询的数据存储在同一个文档中;既可以根据键建立索引,也可以根据文档内容建立索引 |
| 缺点 | 缺乏统一的查询语法 |
| 不适用情形 | 需要在不同文档之间执行事务的场景。文档数据库通常不支持跨文档事务,因此存在此类需求时不适合选择该方案 |
| 使用案例 | 百度云数据库:MongoDB;SAP:MongoDB;Codecademy:MongoDB;Foursquare:MongoDB;NBC News:RavenDB |
第六章
UMP系统中的Mnesia、LVS、RabbitMQ、Zookeeper
-
Mnesia Mnesia是一个分布式数据库管理系统 Mnesia支持事务,支持透明的数据分片,利用两阶段锁实现分布式事务,可以线性扩展到至少50个节点 Mnesia的数据库模式(schema)可在运行时动态重配置,表能被迁移或复制到多个节点来改进容错性 Mnesia的这些特性,使其在开发云数据库时被用来提供分布式数据库服务
-
RabbitMQ RabbitMQ是一个工业级的消息队列产品(功能类似于IBM公司的消息队列产品IBM Websphere MQ),作为消息传输中间件来使用,可以实现可靠的消息传送 UMP集群中各个节点之间的通信,不需要建立专门的连接,都是通过读写队列消息来实现的
-
Zookeeper Zookeeper是高效和可靠的协同工作系统,提供分布式锁之类的基本服务(比如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等),用于构建分布式应用,减轻分布式应用程序所承担的协调任务
在UMP系统中,Zookeeper主要发挥三个作用: 作为全局的配置服务器 提供分布式锁(选出一个集群的“总管”) 监控所有MySQL实例
- LVS LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统 UMP系统借助于LVS来实现集群内部的负载均衡 LVS集群采用IP负载均衡技术和基于内容请求分发技术 调度器是LVS集群系统的唯一入口点,调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器 整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序