笔记《Hbase 权威指南》
- 为什么要用Hbase
- Hbase的诞生是因为现有的关系型数据库已经无法在硬件上满足疯狂增长的数据了,而且因为需要实时的数据提取Memcached也无法满足
- Hbase适合于无结构或半结构化数据,适合于schema变动的情况
- Hbase天生适合以时间轴做查询 - Werner Vogels,可以关注一下他的博客(Amazon的CTO)
- 分布式计算系统的CAP定理:
在理論計算機科學中, CAP定理(CAP theorem), 又被稱作 布魯爾定理(Brewer's theorem), 它指出對於一個分布式计算系統來說,不可能同時滿足以下三點:- 一致性(Consistency) (所有節點在同一時間具有相同的數據)
- 可用性(Availability) (保證每個請求不管成功或者失敗都有響應)
- 分隔容忍(Partition tolerance) (系統中任意信息的丟失或失敗不會影響系統的繼續運作)
- Eventually consistent http://www.allthingsdistributed.com/2007/12/eventually_consistent.html
- NoSQL与关系型数据库并非二元(即非此即彼),你需要从以下几个方面来看下你的数据场景进而决定是否需要使用象HBASE这样的NOSQL数据库
- Data model: 数据访问方式是怎样,是非结构化、半结构化,列式存储,还是文件式存储?你的数据的schema是如何演进的
- Storage model: 是in-memory的还是一直持久化的?RDBMS基本都是数据持久化的,不过你可能就需要一个in-memory的数据库,仍然要看你的数据访问方式是怎样的。
- Consistency model:是严格一致性还是最终一致性? 为了可用性/存储方式或是网络传统速度,你愿意放弃多少的数据一致性?see here 《Lessons from giant-scale services 》
- Physical model:是否分布式数据库?
- Read/write performance:读写速度,必须很清楚明白你的数据的读写方式,是少写多读,一次写入多次读,还是需要频繁修改?
- Secondary indexes:二级索引,你知道你的数据使用场景需要或未来会需要哪些二级索引吗?
- Failure handling:错误处理机制,容灾/错处理
- Compression:压缩算法能压缩物理空间比到10:1甚至更高,尤其适用于大数据的情况
- Load balancing
- Atomic read-modify-write:Having these compare and swap (CAS) or check and set operations available can reduce client-side complexity,即是使用乐观锁还是悲观锁,乐观锁即非阻塞式
扩展阅读: 《一种高效无锁内存队列的实现》《无锁队列的实现》
- Locking, waits and deadlocks:你的数据场景中对死锁,等待等的设计 - 垂直分布:指的增加内存CPU/CORE等,是一种扩展性较差的需要投入大量资金的分布方式,不适合于大数据了。
Denormalization, Duplication, and Intelligent Keys (DDI)
关于HBase URL Shortener示例的一些扩展阅读:
https://github.com/michiard/CLOUDS-LAB/tree/master/hbase-labThe support for sparse, wide tables and column-oriented design often eliminates the need to normalize data and, in the process, the costly JOINoperations needed to aggregatethe data at query time. Use of intelligent keys gives you fine-grained control over how—and where—data is stored. Partial key lookups are possible, and when combined with compound keys, they have the same properties as leading, left-edge indexes. Designing the schemas properly enables you to grow the data from 10 entries to 10 million entries, while still retaining the same write and read performance.
稀疏 sparse,wide tables,是反范式的
bigtable: 丢弃传统的RDBMS的CRU特性,追求更高效适应水平分布扩展需求的支持数据段扫描及全表扫描的分布式数据库
HBASE元素:ROW,ROWKEY,COLUMN,COLUMN FAMILY,CELL
HBASE的自然排序:HBASE是以lexicographically排序的即词典式的排序,按字节码排序
HBASE是支持二级索引的!但BIG TABLE不支持。
HBASE的COLUMN FAMILY须预先定义并且最好不应经常变成,数量上也最好要少于10个,不要太多(思考:难道是因为是sparse, wide,所以最好不要有太多空白列?),不过一个column family你尽管可以拥有上百万的column,因为它们占用的是行而非列。Timestamp可由系统指定也可由用户指定。
Predicate deletion => Log-structured Merge-Tree/LSM
HFile是按column family存储的,即一个column family占用一个HFile,为了更容易in-memory store
HBASE和BIGTABLE的“正统”用法是WEB TABLE啊.. 专用于爬虫的,比如保存anchor, content等
HBASE中的REGION相当于自动分片(auto - sharding)
For HBase and modern hardware, the number would be more like 10 to 1,000 regions per server, but each between 1 GB and 2 GB in size
RegionServer管理近千个regions,理论上每个row只存在于一个region(问,如果一个row超过了一个region,如何处理的? 我们是不是不应该设计这样的rowkey先?)Single-row transaction:一行的数据是事务性原子性的,无跨行原子性
Map-Reduce可将HBASE数据转化为inputFormat和outputFormat
HFile有block,block又致使必须得有block index lookup,这个index保存在内存中(in-memory block index)
Zookeeper是Chubby for bigtable的对应物,
It offers filesystem-like access with directories and files (called znodes) that distributed systems can use to negotiate ownership, register services, or watch for updates. Every region server creates its own ephemeral node in ZooKeeper, which the master, in turn, uses to discover available servers. They are also used to track server failures or network partitions.master (HMaster) 会做
- Zookeeper (问:Zookeeper和HMaster分别做什么?书中P26语焉不详)
- 负载均衡管理
- 监控和管理schema changes, metadata operations,如表/列族的创建等
- Zookeeper仍然使用heartbeating机制Region server
- 做region split (sharding)
- 做region管理Client直接与regions交互读写数据,region server并不参与
这儿完全不懂(P27): 涉及到表扫描算法
Table scans run in linear time and row key lookups or mutations are performed in logarithmic order—or, in extreme cases, even constant order (usingBloom filters). Designing the schema in a way to completely avoid explicit locking, combined with row-level atomicity, gives you the ability to scale your system without any notable effect on read or write performance.
何谓read-modify-write? wiki
In computer science, read–modify–write is a class of atomic operations such as test-and-set, fetch-and-add, and compare-and-swap which both read a memory location and write a new value into it simultaneously, either with a completely new value or some function of the previous value. These operations prevent race conditions in multi-threaded applications. Typically they are used to implement mutexes or semaphores. These atomic operations are also heavily used in non-blocking synchronization.
3.疑惑:
- 如果手动建二级索引表,如何保证数据的即时性? 建多个表,比如USERID,如何应付后期JOIN表格?难道要用MAP-REDUCE来完成?
- HBASE的稀疏性是如何体现的呢?
- 压缩算法是怎样的呢?
- 合并中到底做了哪些事情呢?
- LSM这一节(即P25说明部分没看明白,还要FUTHER READINGS)
- Zookeeper的quorum到底是干嘛的,为什么让我配置在slave上
- 这一句不懂:In addition, it provides push-down predicates, that is, filters, reducing data transferred over the network. 在第一章最后提到了说hbase提供一种push-down predicate,push-down: cause to come or go down,即使数据减少的断言。这个有些不懂,不知道是不是指的就是配置只取出部分的数据,并能将不满足配置有效时间的数据删除或过滤掉。
4.思考:
- Denormalization, Duplication, and Intelligent Keys (DDI)
- 读<BIG TABLE>
- APPEND? 物理存储上的表现?
- 如果和MEM STORE打交道?
笔记《Hbase 权威指南》的更多相关文章
- HTML+CSS笔记 CSS笔记集合
HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...
- CSS笔记--选择器
CSS笔记--选择器 mate的使用 <meta charset="UTF-8"> <title>Document</title> <me ...
- HTML+CSS笔记 CSS中级 一些小技巧
水平居中 行内元素的水平居中 </a></li> <li><a href="#">2</a></li> &l ...
- HTML+CSS笔记 CSS中级 颜色&长度值
颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...
- HTML+CSS笔记 CSS中级 缩写入门
盒子模型代码简写 回忆盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左. 语法: margin:10px 15p ...
- HTML+CSS笔记 CSS进阶再续
CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...
- HTML+CSS笔记 CSS进阶续集
元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1&g ...
- HTML+CSS笔记 CSS进阶
文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...
- HTML+CSS笔记 CSS入门续集
继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...
- HTML+CSS笔记 CSS入门
简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...
随机推荐
- 数据库知识整理<一>
关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数 ...
- [leetcode 17]Letter Combinations of a Phone Number
1 题目: Given a digit string, return all possible letter combinations that the number could represent. ...
- 利用Formdata实现form提交文件上传不跳转页面
作者:幻月九十链接:https://www.zhihu.com/question/19631256/answer/119911045来源:知乎著作权归作者所有,转载请联系作者获得授权. $('form ...
- weblogic10.3.6 自动启动服务后停止的解决方案
windows部署weblogic后,需要手动开启weblogic管理员服务器,即Start Admin Server for Weblogic Server Domain,不过这样的话每次重启或者不 ...
- Dynamic CRM 2013学习笔记(二十)字段改变事件的二种实现方法
CRM里有二种方式实现字段change事件,一种是在form里,一种完全通过js来实现.本文介绍下二者的用途及区别. 1. Form里用法 这种方式估计其实也是添加一个js的function. 这种方 ...
- Windows7上搭建Cocos2d-x 3.1.1开发环境
前言 现在,越来越多的公司采用Cocos2d-x 3.0来开发游戏了,但是现在这样的文章并不多,所以打算写一系列来帮助初学者快速掌握Cocos2d-x 3.0.首先就从开发环境的大家说起吧. 开发工具 ...
- Scrum 是什么?
Scrum 是什么? Scrum 是当前最流行的敏捷软件开发方法论和实施框架.但就像人们对 “Agile” 术语的不同理解一样,不同的人对 “Scrum” 也有着不同的理解.那么,到底 Scrum 是 ...
- Hive性能优化
1.概述 继续<那些年使用Hive踩过的坑>一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题.下面开始本篇文章的优化介绍. 2.介绍 首先 ...
- Android中Service深入学习
概述 1.当用户在与当前应用程序不同的应用程序时,Service可以继续在后台运行. 2.Service可以让其他组件绑定,以便和它交互并进行进程间通信. 3.Service默认运行在创建它的应用程序 ...
- atitit.编程语言 程序语言 的 工具性 和 材料性 双重性 and 语言无关性 本质
atitit.编程语言 程序语言 的 工具性 和 材料性 双重性 and 语言无关性 本质 #---语言的 工具和材料双重性 有的人说语言是个工具,有的人说语言是个材料..实际上语言同时属于两个属性. ...