《NoSQL 精粹》第九章-文档数据库
《NoSQL 精粹》第八章-键值数据库
何谓键值数据库
键值数据库(key-value store)是一张简单的哈希表(hash table),主要用在所有数据库访问均通过主键(primary key)来操作的情况下。
键值数据库特性
适用案例
《NoSQL 精粹》第六章-版本戳
商业事务与系统事务
商业活动(Business Activity):例如,用户浏览产品目录,选中了一瓶价格很实惠的 Talisker 威士忌,填入信用卡信息,然后确认订单。
需要确保最终一致性,但是出于时间、交互的考虑,无法使用事务加以实现
- 如使用事务实现,必须锁住数据库中各个元素。而长时间锁定元素是不现实的。
- 因此,应用程序通常只在处理完用户交互操作之后才开始系统事务,这样的话,锁定时间就比较短了。
- 然而当需要计算和决策的时候,数据有可能已经改动了。价格表上 Talisker 威士忌的售价也许已经变了,或是某人可能会修改客户的地址,从而导致运费改变
条件更新(conditional update),客户端执行操作时,将重新读取商业活动所依赖的信息,并检测该信息在首次读取之后是否一直没有变动,若一直未变,则将其展示给用户。
《NoSQL 精粹》第五章-一致性
关系型数据库试图通过强一致性来避免各种不一致的问题。NoSQL 领域则讨论 CAP 定理和最终一致性。
更新一致性
- 写冲突:当两个客户端试图同时修改一份数据时
- 读写冲突:当某客户端在另一个客户端执行写入操作的过程中读取数据时
解决方式:
- 悲观处理:使用写入锁避免冲突,大幅降低系统反应能力
- 乐观处理:在事后检测冲突并将其修复,条件更新(conditional update):任意客户在执行更新操作之前,都要先测试数据的当前值和其上一次读入的值是否相同
- 乐观处理:保存冲突数据 。用户自行合并(merge)或自动合并(面向特定领域),用于分布式版本控制系统
《NoSQL 精粹》第四章-分布式模型
《NoSQL 精粹》第二章-聚合数据模型
聚合
在领域驱动设计中,把一组相互关联的对象视为一个整体单元来操作,而这个单元就叫聚合(aggregate)。
- 通过原子操作(atomic operation)新聚合的值(含一致性管理)。
- 以聚合为单位与数据存储通信
- 在集群中操作数据库时,用聚合为单位来复制和分片
- 由于程序员经常通过聚合结构来操作数据,故而采用聚合也能让其工作更为轻松
- 面向聚合操作数据时所用的单元,其结构比元组集合复杂得多
《NoSQL 精粹》第一章-为什么使用 NoSQL
关系型数据库的价值
阻抗失谐
基于关系代数(relational algebra),关系模型把数据组织成关系(relation)和元组(tuple)。元组是由键值对(name-value pair)构成的集合,而关系则是元组的集合。
SQL 操作所使用及返回的数据都是关系元组不能包含嵌套记录(nested record)或列表(list)等任何结构。而内存中的数据结构则无此限制,它可以使用的数据组织形式比关系更丰富。
关系模型和内存中的数据结构之间存在差异。这种现象通常称为阻抗失谐。
数据库系统概论-11-并发控制
数据库系统概论-10-数据库恢复技术
事务
事务(Transaction,缩写 txn)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
事务是恢复和并发控制的基本单位。
事务的 ACID 特性:
- 原子性(Atomicity):事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不
- 一致性(Consistency)
- 隔离性(Isolation)
- 持续性(Durability)