深入nosql读书笔记
section 1 nosql :not only sql
泛指这一类数据库和数据存储:不遵循经典RDBMS原理,且常与web规模的大型数据集有关。
RDBMS 假定数据的结构已明确定义,数据是致密的,并且很大程度上时一致的。
- 大数据:多大的数据量才算大。
目前来说,任何超过几个TB大小的数据集都可以归为大数据。 大数据来源
(1)传感器数据(sensor data):分布在不同地理位置上的传感器,对所处环境进行感知,不断生成数据.即便对这些数据进行过滤,仅保留部分有效数据,长时间累积的数据量也是非常惊人的; (2)网站点击流数据(click stream data):为了进行有效的市场营销和推广,用户在网上的每个点击及其时间都被记录下来;利用这些数据,服务提供商可以对用户存取模式进行仔细的分析,从而提供更加具有针对性的服务; (3)移动设备数据(mobile device data):通过移动电子设备包括移动电话和PDA、导航设备等,我们可以获得设备和人员的位置、移动、用户行为等信息,对这些信息进行及时的分析,可以帮助我们进行有效的决策,比如交通监控和疏导系统; (4)射频ID数据(RFID data):RFID可以嵌入到产品中,实现物体的跟踪.一旦RFID得到广泛的应用。将是大量数据的主要来源之一.
section 4
- hbase 列族
- column family 有一些key的value 松散幅度比较大,但是有一些key的value则不同,区分所作的设置,方便索引,加速。
google的主要关键主题:
1. 数据存储使用网络文件系统,系统能扩展到多台机器上。文件本身可能非常大,存储在不同节点上,每个节点运行在不同的机器上。 2. 数据存储结构应具备多种特性,高效存储海量稀疏数据,能够适应结构不断调整,同时还不用更改底层表。 3. 数据处理方式应支持在互相隔离的数据子集上执行计算,然后再合并计算结果。
面向列的数据库
LRU算法(least recently used) 一致性哈希 简朴的键分配策略:取余函数。e,g 把50个键分配给7个节点。键18去节点4,18mod7 = 4。缺点:一旦添加或者删除节点,键就需要重排,十分低效。 一致性哈希,节点增减不会产生非常大的影响。 对象版本 矢量时钟
section 9 事务和数据完整性的管理
9.1ACID 和RDBMS
1. A 原子性 一个事务操作要么完全成功,要么完全失败。 2. C 一致性 如果违反预定义的约束或规则,数据就不会被持久化。 3. I 隔离性 数据的并发 如果两个独立的进程或线程操作统一个数据集,他们有可能会影响到对方 4. D 持久性一旦事务操作被确认了,它就一定会得到保证。
隔离级别的严格程度直接影响到并发性。
使用高级别的隔离增大饿死和死锁的可能性。
一个事物锁住了其他事物要用的资源的时候会发生饿死,而两个并发事务相互等待对方释放资源时会发生死锁。
三个影响分布式系统的因素
1. 一致性C:意味着一致的读写,这样并发操作能看到同样的有效并且一致的数据状态,至少没有过时的数据 2. 可用性A: 一个系统很忙、无法沟通,或者访问时没有响应则被认为是不可用的。 3. 分区容忍性P:并行处理和横向扩展对立的时向上扩展和构建大规模超级计算机
垂直扩展和水平扩展(个人能力和团队能力)
分布式计算的谬误(开发者认为是理所当然,但又常常不成立的)
1. 网络是可靠的 2. 延迟为0 3. 带宽是无限的。 4. 网络是安全的。 5. 拓扑不会发生变化 6. 只有一个管理员 7. 传输成本为0 8. 网络都是同类型的。
Brewer定理 的三大支柱,该定理承载着对这一代大型可扩展分布式系统事务完整性的思索。
分布式系统不可能同时实现所有这三个特性。系统必须作出权衡,至少牺牲一样以成全其他两样。
Gilbert 和 Lynch的证明
需要做的妥协
传统的RDBMS妥协了可用性,选择了一致性和分区容忍性
比如银行转账。 极端情况下,节点失败之后整个系统可能完全不可用。 很多情况下,系统支持备份、快速复制和错误恢复。
妥协分区容忍性,选择一致性和可用性
分区容忍性和容错的区别 一个系统无法为受网络隔离的分区提供服务,但是能瞬间切换到其他节点,那时容错的,但是不具备分区容忍性 典型例子 google Bigtable 主从模式 出现错误时,Zookeeper确定哪个是主分区,哪个是从分区,基于判断,所有读写定向到主分区,从分区改为只读,直到问题解决。 Bigtable 和 HBase 对每个数据集分别存储三份,这样三份中的一份出错或无法同步的情况下,课通过协商方式保持一致性。
妥协一致性(弱一致性)
典型例子 库存位零仍旧可以下单,redis的非100%返回请求。
R 读 W 写 N 集群节点数量
三种情况
R+W>N 极端情况R+W = 2N 很容易建立一致性,因为读和写的节点存在着重叠。而极端情况下系统绝对一致,可以提供ACID。 R=1 W=N 即系统中读远远大于写。读的高并发需要分散到集群的每一个节点上。就读来说,每一个节点都是独立于其他的节点。一旦写操作即更新所有的节点。 R=N W=1 系统中写远远大于读,数据不一致性非常高。 R=W= Ceiling((N+1)/2) 读写各占一半,需要有效选举。
BASE 最终一致性
section 11
- 操作大数据:方法和工具能并行执行,而且之间的交互点要尽可能小。同时并行处理工具要尽可能降低传输的数据量(减少I/O的干扰)