第一部分
第2章 保持组件简单以促进重用。
简单的接口和清晰的定义。
1 复用简单功能以实现新功能。
e.g.
unix管道实现单词统计次数
cat ch*.xml | grep '<figure' | wc -l
2 将应用分层以简化设计
采用分层的思想,当必须做出一些改动的时,可以选择新增或者修改某一个特定层次,而不是去重写它。
重点,将功能分层的利弊进行衡量。
集群:由一系列称之为处理单元的节点构成。
3 策略地使用RAM,SSD和磁盘提升性能
RAM最快,有效利用RAM。
4 非RDBMS的事务控制Base
5 通过数据库分片获得水平扩展能力
数据库自动分片:将数据库划分为一些块,这些块称之为数据库分片,分布在分布式服务器上,作为持续存储数据和最小化宕机时间的手段。
分区容错性:当存储节点或者网络出现故障时仍维持数据库运行。
6 基于Brewer的CAP定理进行权衡
一致性:写操作之后的读操作,必须返回该值。
可用性:只要收到用户的请求,服务器就必须给出回应
分区容错:当存储节点或者网络出现故障时仍维持数据库运行。
这三个指标不可能同时做到。(Eric Brewer)
7 用正规流程评估系统是非常重要的
有助于识别哪些特性对组织最重要,需要作出哪些妥协。
第2部分 数据库模式
第3章 基础数据构架模式
nosql的意思是不只是SQL
构架模式能够对反复出现的高层数据存储模式准确命名。描述当前的问题,列出建议方案的优缺点。
数据库构架模式:识别数据如何存储在系统中
数据库底层设计模式:识别如何与数据进行交互
模式:通常指遇到一份新问题,能够辨别出以前遇到过的结构。
RDBMS的行存储模式
行是数据存储的原子单位。必须满足每一列的要求。
列存储优先考虑聚合报表的操作速度,而不是数据插入的速度。
OLTP与OLAP
联机事务处理(OLTP):处理实时事务
联机分析处理(OLAP):分析用到的数据不经常变化,而是一次写入,多次读取。
第4章 NoSQL数据构架模式
模式存在是因为它能被其它的模式支持。
键值存储 redis
按照键建立索引,能够快速返回,不用关心数据类型。
图存储 neo4j
由一连串的节点和关系组成。
善于存储关联关系复杂的问题。【如社交关系】
列族存储 google的 bigtable
重要。可以进行扩展来管理海量数据。
列存储使用行和列的标识作为通用的键来查找数据。
文档存储 MongoDB
文档中的一切事物都会被自动建好索引。
第5章 原生XML数据库
第三部分 NoSQL解决方案
第6章 用NoSQL管理大数据
大数据问题会持续存在,而且越来越大。
大数据问题是指 任何已庞大到无法使用单处理器管理的商业问题。
第7章 用NoSQL搜索获取信息
搜索:为已知数据的部分信息在NoSQL数据库查找期望数据的行为。
第8章 用NoSQL构建高可用的解决方案
服务无中断地重复运行的系统。
负载和压力测试需要时间和资源。
为了成功,需要有受过正确培训并使用过相同工具的有经验的员工。
第9章 用NoSQL提升敏捷性
NoSQL的商业驱动力是企业对优雅地完成横向拓展的需求。
敏捷性是指快速实现以下目标的能力:
- 构建新应用
- 扩展应用快速满足新阶段的需求
- 在不重写代码的前提下变更已有应用
- 允许非编程人员创建和管理业务逻辑
第四部分 高级主题
第10章 NoSQL与函数式编程
世界是并发的。所有的事物都不共享数据。所有事物都通过消息沟通。所有事物都会失效。
函数式编程
约束:转化过程输出只依赖函数的输入。过程中不受干扰。
函数式编程是没有副作用的并行转化。
第11章 安全:保护NoSQL系统中的数据
第12章 选择合适的NoSQL解决方案
构架利弊分析:
客观地选择最契合业务问题的数据库的过程。
开发人员的目标是写出易于开发和维护的代码。