《Microservices for the Enterprise》英文版带目录
Understand the key challenges and solutions around building microservices in the enterprise application environment. This book provides a comprehensive understanding of microservices architectural principles and how to use microservices in real-world scenarios.
Architectural challenges using microservices with service integration and API management are presented and you learn how to eliminate the use of centralized integration products such as the enterprise service bus (ESB) through the use of composite/integration microservices. Concepts in the book are supported with use cases, and emphasis is put on the reality that most of you are implementing in a “brownfield” environment in which you must implement microservices alongside legacy applications with minimal disruption to your business.
Microservices for the Enterprise covers state-of-the-art techniques around microservices messaging, service development and description, service discovery, governance, and data management technologies and guides you through the microservices design process. Also included is the importance of organizing services as core versus atomic, composite versus integration, and API versus edge, and how such organization helps to eliminate the use of a central ESB and expose services through an API gateway.
What You'll Learn
Design and develop microservices architectures with confidence
Put into practice the most modern techniques around messaging technologies
Apply the Service Mesh pattern to overcome inter-service communication challenges
Apply battle-tested microservices security patterns to address real-world scenarios
Handle API management, decentralized data management, and observability
Who This Book Is For
Developers and DevOps engineers responsible for implementing applications around a microservices architecture, and architects and analysts who are designing such systems
垃圾回收算法手册:自动内存管理的艺术(英文原版,带目录)
目录 · · · · · ·
第1章 引言 1
1.1 显式内存释放 1
1.2自动动态内存管理 3
1.3 垃圾回收算法之间的比较 5
1.3.1 安全性 5
1.3.2 吞吐量 5
1.3.3 完整性与及时性 5
1.3.4 停顿时间 6
1.3.5 空间开销 7
1.3.6 针对特定语言的优化 7
1.3.7 可扩展性与可移植性 8
1.4 性能上的劣势 8
1.5 实验方法 8
1.6 术语和符号 10
1.6.1 堆 10
1.6.2 赋值器与回收器 11
1.6.3 赋值器根 11
1.6.4 引用、域和地址 11
1.6.5 存活性、正确性以及可达性 12
1.6.6 伪代码 12
1.6.7 分配器 13
1.6.8 赋值器的读写操作 13
1.6.9 原子操作 13
1.6.10 集合、多集合、序列以及元组 14
第2章 标记–清扫回收 15
2.1 标记–清扫算法 16
2.2 三色抽象 18
2.3 改进的标记–清扫算法 18
2.4 位图标记 19
2.5 懒惰清扫 21
2.6 标记过程中的高速缓存不命中问题 24
2.7 需要考虑的问题 25
2.7.1 赋值器开销 25
2.7.2 吞吐量 26
2.7.3 空间利用率 26
2.7.4 移动,还是不移动 26
第3章 标记–整理回收 28
3.1 双指针整理算法 29
3.2 Lisp 2算法 30
3.3 引线整理算法 32
3.4 单次遍历算法 34
3.5 需要考虑的问题 36
3.5.1 整理的必要性 36
3.5.2 整理的吞吐量开销 36
3.5.3 长寿数据 36
3.5.4 局部性 37
3.5.5 标记–整理算法的局限性 37
第4章 复制式回收 38
4.1 半区复制回收 38
4.1.1 工作列表的实现 39
4.1.2 示例 40
4.2 遍历顺序与局部性 42
4.3 需要考虑的问题 46
4.3.1 分配 46
4.3.2 空间与局部性 47
4.3.3 移动对象 48
第5章 引用计数 49
5.1 引用计数算法的优缺点 50
5.2 提升效率 51
5.3 延迟引用计数 52
5.4 合并引用计数 54
5.5 环状引用计数 57
5.6 受限域引用计数 61
5.7 需要考虑的问题 62
5.7.1 应用场景 62
5.7.2 高级的解决方案 62
第6章 垃圾回收器的比较 64
6.1 吞吐量 64
6.2 停顿时间 65
6.3 内存空间 65
6.4 回收器的实现 66
6.5 自适应系统 66
6.6 统一垃圾回收理论 67
6.6.1 垃圾回收的抽象 67
6.6.2 追踪式垃圾回收 67
6.6.3 引用计数垃圾回收 69
第7章 内存分配 72
7.1 顺序分配 72
7.2 空闲链表分配 73
7.2.1 首次适应分配 73
7.2.2 循环首次适应分配 75
7.2.3 最佳适应分配 75
7.2.4 空闲链表分配的加速 76
7.3 内存碎片化 77
7.4 分区适应分配 78
7.4.1 内存碎片 79
7.4.2 空间大小分级的填充 79
7.5 分区适应分配与简单空闲链表分配的结合 81
7.6 其他需要考虑的问题 81
7.6.1 字节对齐 81
7.6.2 空间大小限制 82
7.6.3 边界标签 82
7.6.4 堆可解析性 82
7.6.5 局部性 84
7.6.6 拓展块保护 84
7.6.7 跨越映射 85
7.7 并发系统中的内存分配 85
7.8 需要考虑的问题 86
第8章 堆内存的划分 87
8.1 术语 87
8.2 为何要进行分区 87
8.2.1 根据移动性进行分区 87
8.2.2 根据对象大小进行分区 88
8.2.3 为空间进行分区 88
8.2.4 根据类别进行分区 89
8.2.5 为效益进行分区 89
8.2.6 为缩短停顿时间进行分区 90
8.2.7 为局部性进行分区 90
8.2.8 根据线程进行分区 90
8.2.9 根据可用性进行分区 91
8.2.10 根据易变性进行分区 91
8.3 如何进行分区 92
8.4 何时进行分区 93
第9章 分代垃圾回收 95
9.1 示例 95
9.2 时间测量 96
9.3 分代假说 97
9.4 分代与堆布局 97
9.5 多分代 98
9.6 年龄记录 99
9.6.1 集体提升 99
9.6.2 衰老半区 100
9.6.3 存活对象空间与柔性提升 101
9.7 对程序行为的适应 103
9.7.1 Appel式垃圾回收 103
9.7.2 基于反馈的对象提升 104
9.8 分代间指针 105
9.8.1 记忆集 106
9.8.2 指针方向 106
9.9 空间管理 107
9.10 中年优先回收 108
9.11 带式回收框架 110
9.12 启发式方法在分代垃圾回收中的应用 112
9.13 需要考虑的问题 113
9.14 抽象分代垃圾回收 115
第10章 其他分区策略 117
10.1 大对象空间 117
10.1.1 转轮回收器 118
10.1.2 在操作系统支持下的对象移动 119
10.1.3 不包含指针的对象 119
10.2 基于对象拓扑结构的回收器 119
10.2.1 成熟对象空间的回收 120
10.2.2 基于对象相关性的回收 122
10.2.3 线程本地回收 123
10.2.4 栈上分配 126
10.2.5 区域推断 127
10.3 混合标记–清扫、复制式回收器 128
10.3.1 Garbage-First回收 129
10.3.2 Immix回收以及其他回收 130
10.3.3 受限内存空间中的复制式回收 133
10.4 书签回收器 134
10.5 超引用计数回收器 135
10.6 需要考虑的问题 136
第11章 运行时接口 138
11.1 对象分配接口 138
11.1.1 分配过程的加速 141
11.1.2 清零 141
11.2 指针查找 142
11.2.1 保守式指针查找 143
11.2.2 使用带标签值进行精确指针查找 144
11.2.3 对象中的精确指针查找 145
11.2.4 全局根中的精确指针查找 147
11.2.5 栈与寄存器中的精确指针查找 147
11.2.6 代码中的精确指针查找 157
11.2.7 内部指针的处理 158
11.2.8 派生指针的处理 159
11.3 对象表 159
11.4 来自外部代码的引用 160
11.5 栈屏障 162
11.6 安全回收点以及赋值器的挂起 163
11.7 针对代码的回收 165
11.8 读写屏障 166
11.8.1 读写屏障的设计工程学 167
11.8.2 写屏障的精度 167
11.8.3 哈希表 169
11.8.4 顺序存储缓冲区 170
11.8.5 溢出处理 172
11.8.6 卡表 172
11.8.7 跨越映射 174
11.8.8 汇总卡 176
11.8.9 硬件与虚拟内存技术 176
11.8.10 写屏障相关技术小结 177
11.8.11 内存块链表 178
11.9 地址空间管理 179
11.10 虚拟内存页保护策略的应用 180
11.10.1 二次映射 180
11.10.2 禁止访问页的应用 181
11.11 堆大小的选择 183
11.12 需要考虑的问题 185
第12章 特定语言相关内容 188
12.1 终结 188
12.1.1 何时调用终结方法 189
12.1.2 终结方法应由哪个线程调用 190
12.1.3 是否允许终结方法彼此之间的并发 190
12.1.4 是否允许终结方法访问不可达对象 190
12.1.5 何时回收已终结对象 191
12.1.6 终结方法执行出错时应当如何处理 191
12.1.7 终结操作是否需要遵从某种顺序 191
12.1.8 终结过程中的竞争问题 192
12.1.9 终结方法与锁 193
12.1.10 特定语言的终结机制 193
12.1.11 进一步的研究 195
12.2 弱引用 195
12.2.1 其他动因 196
12.2.2 对不同强度指针的支持 196
12.2.3 使用虚对象控制终结顺序 199
12.2.4 弱指针置空过程的竞争问题 199
12.2.5 弱指针置空时的通知 199
12.2.6 其他语言中的弱指针 200
12.3 需要考虑的问题 201
第13章 并发算法预备知识 202
13.1 硬件 202
13.1.1 处理器与线程 202
13.1.2 处理器与内存之间的互联 203
13.1.3 内存 203
13.1.4 高速缓存 204
13.1.5 高速缓存一致性 204
13.1.6 高速缓存一致性对性能的影响示例:自旋锁 205
13.2 硬件内存一致性 207
13.2.1 内存屏障与先于关系 208
13.2.2 内存一致性模型 209
13.3 硬件原语 209
13.3.1 比较并交换 210
13.3.2 加载链接/条件存储 211
13.3.3 原子算术原语 212
13.3.4 检测–检测并设置 213
13.3.5 更加强大的原语 213
13.3.6 原子操作原语的开销 214
13.4 前进保障 215
13.5 并发算法的符号记法 217
13.6 互斥 218
13.7 工作共享与结束检测 219
13.8 并发数据结构 224
13.8.1 并发栈 226
13.8.2 基于单链表的并发队列 228
13.8.3 基于数组的并发队列 230
13.8.4 支持工作窃取的并发双端队列 235
13.9 事务内存 237
13.9.1 何谓事务内存 237
13.9.2 使用事务内存助力垃圾回收器的实现 239
13.9.3 垃圾回收机制对事务内存的支持 240
13.10 需要考虑的问题 241
第14章 并行垃圾回收 242
14.1 是否有足够多的工作可以并行 243
14.2 负载均衡 243
14.3 同步 245
14.4 并行回收的分类 245
14.5 并行标记 246
14.6 并行复制 254
14.6.1 以处理器为中心的并行复制 254
14.6.2 以内存为中心的并行复制技术 258
14.7 并行清扫 263
14.8 并行整理 264
14.9 需要考虑的问题 267
14.9.1 术语 267
14.9.2 并行回收是否值得 267
14.9.3 负载均衡策略 267
14.9.4 并行追踪 268
14.9.5 低级同步 269
14.9.6 并行清扫与并行整理 270
14.9.7 结束检测 270
第15章 并发垃圾回收 271
15.1 并发回收的正确性 272
15.1.1 三色抽象回顾 273
15.1.2 对象丢失问题 274
15.1.3 强三色不变式与弱三色不变式 275
15.1.4 回收精度 276
15.1.5 赋值器颜色 276
15.1.6 新分配对象的颜色 276
15.1.7 基于增量更新的解决方案 277
15.1.8 基于起始快照的解决方案 277
15.2 并发回收的相关屏障技术 277
15.2.1 灰色赋值器屏障技术 278
15.2.2 黑色赋值器屏障技术 279
15.2.3 屏障技术的完整性 280
15.2.4 并发写屏障的实现机制 281
15.2.5 单级卡表 282
15.2.6 两级卡表 282
15.2.7 减少回收工作量的相关策略 282
15.3 需要考虑的问题 283
第16章 并发标记–清扫算法 285
16.1 初始化 285
16.2 结束 287
16.3 分配 287
16.4 标记过程与清扫过程的并发 288
16.5 即时标记 289
16.5.1 即时回收的写屏障 290
16.5.2 Doligez-Leroy-Gonthier回收器 290
16.5.3 Doligez-Leroy-Gonthier回收器在Java中的应用 292
16.5.4 滑动视图 292
16.6 抽象并发回收框架 293
16.6.1 回收波面 294
16.6.2 增加追踪源头 295
16.6.3 赋值器屏障 295
16.6.4 精度 295
16.6.5 抽象并发回收器的实例化 296
16.7 需要考虑的问题 296
第17章 并发复制、并发整理算法 298
17.1 主体并发复制:Baker算法 298
17.2 Brooks间接屏障 301
17.3 自删除读屏障 301
17.4 副本复制 302
17.5 多版本复制 303
17.6 Sapphire回收器 306
17.6.1 回收的各个阶段 306
17.6.2 相邻阶段的合并 311
17.6.3 Volatile域 312
17.7 并发整理算法 312
17.7.1 Compressor回收器 312
17.7.2 Pauseless回收器 315
17.8 需要考虑的问题 321
第18章 并发引用计数算法 322
18.1 简单引用计数算法回顾 322
18.2 缓冲引用计数 324
18.3 并发环境下的环状引用计数处理 326
18.4 堆快照的获取 326
18.5 滑动视图引用计数 328
18.5.1 面向年龄的回收 328
18.5.2 算法实现 328
18.5.3 基于滑动视图的环状垃圾回收 331
18.5.4 内存一致性 331
18.6 需要考虑的问题 332
第19章 实时垃圾回收 333
19.1 实时系统 333
19.2 实时回收的调度 334
19.3 基于工作的实时回收 335
19.3.1 并行、并发副本回收 335
19.3.2 非均匀工作负载的影响 341
19.4 基于间隙的实时回收 342
19.4.1 回收工作的调度 346
19.4.2 执行开销 346
19.4.3 开发者需要提供的信息 347
19.5 基于时间的实时回收:Metronome回收器 347
19.5.1 赋值器使用率 348
19.5.2 对可预测性的支持 349
19.5.3 Metronome回收器的分析 351
19.5.4 鲁棒性 355
19.6 多种调度策略的结合:“税收与开支” 355
19.6.1 “税收与开支”调度策略 356
19.6.2 “税收与开支”调度策略的实现基础 357
19.7 内存碎片控制 359
19.7.1 Metronome回收器中的增量整理 360
19.7.2 单处理器上的增量副本复制 361
19.7.3 Stopless回收器:无锁垃圾回收 361
19.7.4 Staccato回收器:在赋值器无等待前进保障条件下的尽力整理 363
19.7.5 Chicken回收器:在赋值器无等待前进保障条件下的尽力整理(x86平台) 365
19.7.6 Clover回收器:赋值器乐观无锁前进保障下的可靠整理 366
19.7.7 Stopless回收器、Chicken回收器、Clover回收器之间的比较 367
19.7.8 离散分配 368
19.8 需要考虑的问题 370
术语表 372
参考文献 383
索引 413
headfirst设计模式
清晰版
目录 · · · · · ·
引子
谁适合读这本书?
我们知道你的大脑在想什么
元认知
让你的大脑就范
技术审校
致谢
1 欢迎来到设计模式世界:设计模式入门
模拟鸭子应用
Joe想到继承
利用接口如何?
软件开发的不变真理
分开变化和不变部分
设计鸭子的行为
测试鸭子的代码
动态地设置行为
封装行为的大局观
“有一个”比“是一个”更好
策略模式
共享模式词汇的威力
我如何使用设计模式?
设计箱内的工具
习题解答
2 让你的对象知悉现况
气象观测站
认识观察者模式
出版者+订阅者=观罕者模式
五分钟短剧:观察主题
定义观察者模式
松耦合的威力
设计气象站
实现气象站
使用Java内建的观察者模式
java.util.Observable的黑暗面
设计箱内的工具
习题解答
……
3 装饰者模式:装饰对象
4 工厂模式:烘烤OO的精华
5 单件模式:独一无二的对象
6 命令模式:封装调用
7 适配器模式与外观模式:随遇而安
8 模板方法模式:封装算法
9 送代器与组合模式:管理良好的集合
10 状态模式:事物的状态
11 代理模式:控制对象访问
12 复合模式:模式中的模式
13 与设计模式相处:真实世界中的模式
A 附录A:剩下的模式
Java夜未眠
[励志篇]
1 学习,是一条漫长的道路
2 写程式,好好玩
3 如何进入程式设计的领域
4 职业敏感度
5 从美丽的菲奥莉娜说起
6 走出你的成功之路
7 从 a 到 e+
[牢骚篇]
8 香鸡排首部曲:程式与香鸡排
9 香鸡排二部曲:再论香鸡排
10 香鸡排三部曲:完结篇
11 software rush
12 ain't no sunshine anymore?
13 e化声声催,e化路迢迢
14 我的座右铭
15 一个java信仰者的告解
[生涯篇]
.16 程式员的生涯规划
17 软体人才何处寻?
18 软体产业的知识经济
19 认证无用论?
20 认证有用论?
21 软体与性
[图书篇]
22 你说挑书就像挑老师一样,我说你乱有思想的
23 苦恨年年压金线,为他人作嫁衣裳
24 必也正名乎
25 偶像崇拜(一)
26 偶像崇拜(二)
27 偶像崇拜(三)
偶像崇拜(四)
[程序设计学习篇]
28 java标准简介
29 java学习之道
30 摩登原始人
31 你该学什么程序语言?
32 语言、平台、程式库
34 oooo
35 debug
[软体工程篇]
36 design pattern新解
37 软体产业的大洪水
38 没人在乎软体工程
39 软体工程的吊诡
40 版本控制
[系统篇]
41 不可能的任务
42 垃圾!
43 java相关的编译技术
44 实现java平台的三种方式
45 变数的种类
46 shit happens, part i
47 shit happens, part ii
48 用xml设计一个你自己的程式语言
49 java繁体中文处理完全攻略
50 编译、反编译、反反编译
51 static 的意义与实作方式
[杂感]
52 an open e-mail
53 散文随笔系列文章暂停
54 极短篇:王伯伯启示录
55 叫专家,太沈重
56 比赛杂感
ava程序员修炼之道(英).pdf
第一部分 用Java 7做开发
第1章 初识Java 7 2
1.1 语言与平台 2
1.2 Coin项目:浓缩的都是精华 4
1.3 Coin项目中的修改 7
1.3.1 switch语句中的String 7
1.3.2 更强的数值文本表示法 8
1.3.3 改善后的异常处理 9
1.3.4 try-with-resources(TWR) 11
1.3.5 钻石语法 13
1.3.6 简化变参方法调用 14
1.4 小结 15
第2章 新I/O 17
2.1 Java I/O简史 18
2.1.1 Java 1.0到1.3 19
2.1.2 在Java 1.4中引入的NIO 19
2.1.3 下一代I/O-NIO.2 20
2.2 文件I/O的基石:Path 20
2.2.1 创建一个Path 23
2.2.2 从Path中获取信息 23
2.2.3 移除冗余项 24
2.2.4 转换Path 25
2.2.5 NIO.2 Path和Java已有的File类 25
2.3 处理目录和目录树 26
2.3.1 在目录中查找文件 26
2.3.2 遍历目录树 27
2.4 NIO.2的文件系统I/O 28
2.4.1 创建和删除文件 29
2.4.2 文件的复制和移动 30
2.4.3 文件的属性 31
2.4.4 快速读写数据 34
2.4.5 文件修改通知 35
2.4.6 SeekableByteChannel 37
2.5 异步 I/O操作 37
2.5.1 将来式 38
2.5.2 回调式 40
2.6 Socket和Channel的整合 41
2.6.1 NetworkChannel 42
2.6.2 MulticastChannel 42
2.7 小结 43
第二部分 关键技术
第3章 依赖注入 46
3.1 知识注入:理解IoC和DI 46
3.1.1 控制反转 47
3.1.2 依赖注入 48
3.1.3 转成DI 49
3.2 Java中标准化的DI 53
3.2.1 @Inject注解 54
3.2.2 @Qualifier注解 55
3.2.3 @Named注解 57
3.2.4 @Scope注解 57
3.2.5 @Singleton注解 57
3.2.6 接口Provider<T> 58
3.3 Java中的DI参考实现:Guice 3 59
3.3.1 Guice新手指南 59
3.3.2 水手绳结:Guice的各种绑定 62
3.3.3 在Guice中限定注入对象的生命周期 64
3.4 小结 66
第4章 现代并发 67
4.1 并发理论简介 68
4.1.1 解释Java线程模型 68
4.1.2 设计理念 69
4.1.3 这些原则如何以及为何会相互冲突 70
4.1.4 系统开销之源 71
4.1.5 一个事务处理的例子 71
4.2 块结构并发(Java 5之前) 72
4.2.1 同步与锁 73
4.2.2 线程的状态模型 74
4.2.3 完全同步对象 74
4.2.4 死锁 76
4.2.5 为什么是synchronized 77
4.2.6 关键字volatile 78
4.2.7 不可变性 79
4.3 现代并发应用程序的构件 80
4.3.1 原子类:java.util. concurrent.atomic 81
4.3.2 线程锁:java.util. concurrent.locks 81
4.3.3 CountDownLatch 85
4.3.4 ConcurrentHashMap 86
4.3.5 CopyOnWriteArrayList 87
4.3.6 Queue 90
4.4 控制执行 95
4.4.1 任务建模 96
4.4.2 ScheduledThread-PoolExecutor 97
4.5 分支/合并框架 98
4.5.1 一个简单的分支/合并例子 99
4.5.2 ForkJoinTask与工作窃取 101
4.5.3 并行问题 102
4.6 Java内存模型 103
4.7 小结 104
第5章 类文件与字节码 106
5.1 类加载和类对象 107
5.1.1 加载和连接概览 107
5.1.2 验证 108
5.1.3 Class对象 108
5.1.4 类加载器 109
5.1.5 示例:依赖注入中的类加载器 110
5.2 使用方法句柄 111
5.2.1 MethodHandle 112
5.2.2 MethodType 112
5.2.3 查找方法句柄 113
5.2.4 示例:反射、代理与方法句柄 114
5.2.5 为什么选择MethodHandle 116
5.3 检查类文件 117
5.3.1 介绍javap 117
5.3.2 方法签名的内部形式 118
5.3.3 常量池 119
5.4 字节码 121
5.4.1 示例:反编译类 121
5.4.2 运行时环境 123
5.4.3 操作码介绍 124
5.4.4 加载和储存操作码 125
5.4.5 数学运算操作码 125
5.4.6 执行控制操作码 126
5.4.7 调用操作码 126
5.4.8 平台操作操作码 127
5.4.9 操作码的快捷形式 127
5.4.10 示例:字符串拼接 127
5.5 invokedynamic 129
5.5.1 invokedynamic如何工作 129
5.5.2 示例:反编译invokedynamic调用 130
5.6 小结 132
第6章 理解性能调优 133
6.1 性能术语 134
6.1.1 等待时间 135
6.1.2 吞吐量 135
6.1.3 利用率 135
6.1.4 效率 135
6.1.5 容量 136
6.1.6 扩展性 136
6.1.7 退化 136
6.2 务实的性能分析法 136
6.2.1 知道你在测量什么 137
6.2.2 知道怎么测量 137
6.2.3 知道性能目标是什么 138
6.2.4 知道什么时候停止优化 139
6.2.5 知道高性能的成本 139
6.2.6 知道过早优化的危险 140
6.3 哪里出错了?我们担心的原因 140
6.3.1 过去和未来的性能趋势:摩尔定律 141
6.3.2 理解内存延迟层级 142
6.3.3 为什么Java性能调优存在困难 143
6.4 一个来自于硬件的时间问题 144
6.4.1 硬件时钟 144
6.4.2 麻烦的nanoTime() 144
6.4.3 时间在性能调优中的作用 146
6.4.4 案例研究:理解缓存未命中 147
6.5 垃圾收集 149
6.5.1 基本算法 149
6.5.2 标记和清除 150
6.5.3 jmap 152
6.5.4 与GC相关的JVM参数 155
6.5.5 读懂GC日志 156
6.5.6 用VisualVM查看内存使用情况 157
6.5.7 逸出分析 159
6.5.8 并发标记清除 160
6.5.9 新的收集器:G1 161
6.6 HotSpot的JIT编译 162
6.6.1 介绍HotSpot 163
6.6.2 内联方法 164
6.6.3 动态编译和独占调用 165
6.6.4 读懂编译日志 166
6.7 小结 167
第三部分 JVM上的多语言编程
第7章 备选JVM语言 170
7.1 Java 太笨?纯粹诽谤 170
7.1.1 整合系统 171
7.1.2 函数式编程的基本原理 172
7.1.3 映射与过滤器 173
7.2 语言生态学 174
7.2.1 解释型与编译型语言 175
7.2.2 动态与静态类型 175
7.2.3 命令式与函数式语言 176
7.2.4 重新实现的语言与原生语言 176
7.3 JVM上的多语言编程 177
7.3.1 为什么要用非Java语言 178
7.3.2 崭露头角的语言新星 179
7.4 如何挑选称心的非Java语言 180
7.4.1 低风险 181
7.4.2 与Java的交互操作 181
7.4.3 良好的工具和测试支持 182
7.4.4 备选语言学习难度 182
7.4.5 使用备选语言的开发者 182
7.5 JVM对备选语言的支持 183
7.5.1 非Java语言的运行时环境 183
7.5.2 编译器小说 184
7.6 小结 185
第8章 Groovy:Java的动态伴侣 187
8.1 Groovy入门 189
8.1.1 编译和运行 189
8.1.2 Groovy控制台 190
8.2 Groovy 101:语法和语义 191
8.2.1 默认导入 192
8.2.2 数字处理 192
8.2.3 变量、动态与静态类型、作用域 193
8.2.4 列表和映射语法 195
8.3 与Java的差异——新手陷阱 196
8.3.1 可选的分号和返回语句 196
8.3.2 可选的参数括号 197
8.3.3 访问限定符 197
8.3.4 异常处理 198
8.3.5 Groovy中的相等 198
8.3.6 内部类 199
8.4 Java不具备的Groovy特性 199
8.4.1 GroovyBean 199
8.4.2 安全解引用操作符 200
8.4.3 猫王操作符 201
8.4.4 增强型字符串 201
8.4.5 函数字面值 202
8.4.6 内置的集合操作 203
8.4.7 对正则表达式的内置支持 204
8.4.8 简单的XML处理 205
8.5 Groovy与Java的合作 207
8.5.1 从Groovy调用Java 207
8.5.2 从Java调用Groovy 208
8.6 小结 211
第9章 Scala:简约而不简单 212
9.1 走马观花Scala 213
9.1.1 简约的Scala 213
9.1.2 match表达式 215
9.1.3 case类 217
9.1.4 actor 218
9.2 Scala能用在我的项目中吗 219
9.2.1 Scala和Java的比较 219
9.2.2 何时以及如何开始使用Scala 220
9.2.3 Scala可能不适合当前项目的迹象 220
9.3 让代码因Scala重新绽放 221
9.3.1 使用编译器和REPL 221
9.3.2 类型推断 222
9.3.3 方法 223
9.3.4 导入 224
9.3.5 循环和控制结构 224
9.3.6 Scala的函数式编程 225
9.4 Scala对象模型:相似但不同 226
9.4.1 一切皆对象 226
9.4.2 构造方法 228
9.4.3 特质 228
9.4.4 单例和伴生对象 230
9.4.5 case类和match表达式 232
9.4.6 警世寓言 234
9.5 数据结构和集合 235
9.5.1 List 235
9.5.2 Map 238
9.5.3 泛型 239
9.6 actor介绍 242
9.6.1 代码大舞台 242
9.6.2 用mailbox跟actor通信 243
9.7 小结 244
第10章 Clojure:更安全地编程 245
10.1 Clojure介绍 245
10.1.1 Clojure的Hello World 246
10.1.2 REPL入门 247
10.1.3 犯了错误 248
10.1.4 学着去爱括号 248
10.2 寻找Clojure:语法和语义 249
10.2.1 特殊形式新手营 249
10.2.2 列表、向量、映射和集 250
10.2.3 数学运算、相等和其他操作 252
10.3 使用函数和循环 253
10.3.1 一些简单的Clojure函数 253
10.3.2 Clojure中的循环 255
10.3.3 读取器宏和派发器 256
10.3.4 函数式编程和闭包 257
10.4 Clojure序列 258
10.4.1 懒序列 260
10.4.2 序列和变参函数 261
10.5 Clojure与Java的互操作 262
10.5.1 从Clojure中调用Java 262
10.5.2 Clojure值的Java类型 263
10.5.3 使用Clojure代理 264
10.5.4 用REPL做探索式编程 264
10.5.5 在Java中使用Clojure 265
10.6 Clojure并发 265
10.6.1 未来式与并行调用 266
10.6.2 ref形式 267
10.6.3 代理 271
10.7 小结 272
第四部分 多语种项目开发
第11章 测试驱动开发 274
11.1 TDD概览 275
11.1.1 一个测试用例 276
11.1.2 多个测试用例 280
11.1.3 深入思考红—绿—重构循环 282
11.1.4 JUnit 283
11.2 测试替身 285
11.2.1 虚设对象 286
11.2.2 存根对象 287
11.2.3 伪装替身 290
11.2.4 模拟对象 295
11.3 ScalaTest 296
11.4 小结 298
第12章 构建和持续集成 300
12.1 与Maven 3相遇 302
12.2 Maven 3入门项目 303
12.3 用Maven 3构建Java7developer项目 305
12.3.1 POM 305
12.3.2 运行示例 311
12.4 Jenkins:满足CI需求 314
12.4.1 基础配置 315
12.4.2 设置任务 316
12.4.3 执行任务 319
12.5 Maven和Jenkins代码指标 320
12.5.1 安装Jenkins插件 321
12.5.2 用Checkstyle保持代码一致性 322
12.5.3 用FindBugs设定质量标杆 323
12.6 Leiningen 325
12.6.1 Leiningen入门 326
12.6.2 Leiningen的架构 326
12.6.3 Hello Lein 327
12.6.4 用Leiningen做面向REPL的TDD 329
12.6.5 用Leiningen打包和部署 330
12.7 小结 332
第13章 快速Web开发 333
13.1 Java Web框架的问题 334
13.1.1 Java编译为什么不好 335
13.1.2 静态类型为什么不好 335
13.2 选择Web框架的标准 336
13.3 Grails入门 338
13.4 Grails快速启动项目 338
13.4.1 创建域对象 340
13.4.2 测试驱动开发 340
13.4.3 域对象持久化 342
13.4.4 创建测试数据 343
13.4.5 控制器 343
13.4.6 GSP/JSP页面 344
13.4.7 脚手架和UI的自动化创建 346
13.4.8 快速周转的开发 347
13.5 深入Grails 347
13.5.1 日志 347
13.5.2 GORM:对象关系映射 348
13.5.3 Grails插件 349
13.6 Compojure入门 350
13.6.1 Hello Compojure 350
13.6.2 Ring和路由 352
13.6.3 Hiccup 353
13.7 我是不是一只水獭 353
13.7.1 项目设置 354
13.7.2 核心函数 357
13.8 小结 359
第14章 保持优秀 361
14.1 对Java 8的期待 361
14.1.1 lambda表达式(闭包) 362
14.1.2 模块化(拼图Jigsaw) 363
14.2 多语言编程 365
14.2.1 语言的互操作性及元对象协议 365
14.2.2 多语言模块化 366
14.3 未来的并发趋势 367
14.3.1 多核的世界 367
14.3.2 运行时管理的并发 367
14.4 JVM的新方向 368
14.4.1 VM的合并 368
14.4.2 协同程序 369
14.4.3 元组 370
14.5 小结 372
附录A java7developer:源码安装 373
附录B glob模式语法及示例 380
附录C 安装备选JVM语言 382
附录D Jenkins的下载和安装 388
附录E java7developer:Maven POM 390
数据库系统概念(原书第六版中文版).zip.001
出版者的话
译者序
前言
第1章 引言
1.1数据库系统的应用
1.2数据库系统的目标
1.3数据视图
1.3.1数据抽象
1.3.2实例和模式
1.3.3数据模型
1.4数据库语言
1.4.1数据操纵语言
1.4.2数据定义语言
1.5关系数据库
1.5.1表
1.5.2数据操纵语言
1.5.3数据定义语言
1.5.4来自应用程序的数据库访问
1.6数据库设计
1.6.1设计过程
1.6.2大学机构的数据库设计
1.6.3实体-联系模型
1.6.4规范化
1.7数据存储和查询
1.7.1存储管理器
1.7.2查询处理器
1.8事务管理
1.9数据库体系结构
1.10数据挖掘与信息检索
1.11特种数据库
1.11.1基于对象的数据模型
1.11.2半结构化数据模型
1.12数据库用户和管理员
1.12.1数据库用户和用户界面
1.12.2数据库管理员
1.13数据库系统的历史
1.14总结
术语回顾
实践习题
习题
工具
文献注解
第一部分 关系数据库
第2章 关系模型介绍
2.1关系数据库的结构
2.2数据库模式
2.3码
2.4模式图
2.5关系查询语言
2.6关系运算
2.7总结
术语回顾
实践习题
习题
文献注解
第3章 SQL
3.1SQL查询语言概览
3.2SQL数据定义
3.2.1基本类型
3.2.2基本模式定义
3.3SQL查询的基本结构
3.3.1单关系查询
3.3.2多关系查询
3.3.3自然连接
3.4附加的基本运算
3.4.1更名运算
3.4.2字符串运算
3.4.3select子句中的属性说明
3.4.4排列元组的显示次序
3.4.5where子句谓词
3.5集合运算
3.5?1并运算
3.5?2交运算
3.5?3差运算
3.6空值
3.7聚集函数
3.7.1基本聚集
3.7.2分组聚集
3.7.3having子句
3.7.4对空值和布尔值的聚集
3.8嵌套子查询
3.8.1集合成员资格
3.8.2集合的比较
3.8.3空关系测试
3.8.4重复元组存在性测试
3.8.5from子句中的子查询
3.8.6with子句
3.8.7标量子查询
3.9数据库的修改
3.9.1删除
3.9.2插入
3.9.3更新
3.10总结
术语回顾
实践习题
习题
工具
文献注解
第4章 中级SQL
4.1连接表达式
4.1.1连接条件
4.1.2外连接
4.1.3连接类型和条件
4.2视图
4.2?1视图定义
4.2?2SQL查询中使用视图
4.2?3物化视图
4.2.4视图更新
4.3事务
4.4完整性约束
4.4.1单个关系上的约束
4.4.2not null约束
4.4.3unique约束
4.4.4check子句
4.4.5参照完整性
4.4.6事务中对完整性约束的违反
4.4.7复杂check条件与断言
4.5SQL的数据类型与模式
4.5.1SQL中的日期和时间类型
4.5.2默认值
4.5.3创建索引
4.5.4大对象类型
4.5.5用户定义的类型
4.5.6create table的扩展
4.5.7模式、目录与环境
4.6授权
4.6.1权限的授予与收回
4.6.2角色
4.6.3视图的授权
4.6.4模式的授权
4.6.5权限的转移
4.6.6权限的收回
4.7总结
术语回顾
实践习题
习题
文献注解
第5章 高级SQL
5.1使用程序设计语言访问数据库
5.1.1JDBC
5.1.2ODBC
5.1.3嵌入式SQL
5.2函数和过程
5.2.1声明和调用SQL函数和过程
5.2.2支持过程和函数的语言构造
5.2.3外部语言过程
5.3触发器
5.3.1对触发器的需求
5.3.2SQL中的触发器
5.3.3何时不用触发器
5.4递归查询**
5.4.1用迭代来计算传递闭包
5.4.2SQL中的递归
5.5高级聚集特性**
5.5.1排名
5.5.2分窗
5.6OLAP**
5.6.1联机分析处理
5.6.2交叉表与关系表
5.6.3 SQL中的OLAP
5.7总结
术语回顾
实践习题
习题
工具
文献注解
第6章 形式化关系查询语言
6.1关系代数
6.1.1基本运算
6.1.2关系代数的形式化定义
6.1.3附加的关系代数运算
6.1.4扩展的关系代数运算
6.2元组关系演算
6.2.1查询示例
6.2.2形式化定义
6.2.3表达式的安全性
6.2.4语言的表达能力
6.3域关系演算
6.3.1形式化定义
6.3.2查询的例子
6.3.3表达式的安全性
6.3.4语言的表达能力
6.4总结
术语回顾
实践习题
习题
文献注解
第二部分 数据库设计
第7章 数据库设计和E-R模型
7.1设计过程概览
7.1.1设计阶段
7.1.2设计选择
7.2实体-联系模型
7.2.1实体集
7.2.2联系集
7.2.3属性
7.3约束
7.3.1映射基数
7.3.2参与约束
7.3.3码
7.4从实体集中删除冗余属性
7.5实体-联系图
7.5.1基本结构
7.5.2映射基数
7.5.3复杂的属性
7.5.4角色
7.5.5非二元的联系集
7.5.6弱实体集
7.5.7大学的E-R图
7.6转换为关系模式
7.6.1具有简单属性的强实体集的表示
7.6.2具有复杂属性的强实体集的表示
7.6.3弱实体集的表示
7.6.4联系集的表示
7.7实体-联系设计问题
7.7.1用实体集还是用属性
7.7.2用实体集还是用联系集
7.7.3二元还是n元联系集
7.7.4联系属性的布局
7.8扩展的E-R特性
7.8.1特化
7.8.2概化
7.8.3属性继承
7.8.4概化上的约束
7.8.5聚集
7.8.6转换为关系模式
7.9数据建模的其他表示法
7.9.1E-R图的其他表示法
7.9.2统一建模语言UML
7.10数据库设计的其他方面
7.10.1数据约束和关系数据库设计
7.10.2使用需求:查询、性能
7.10.3授权需求
7.10.4数据流、工作流
7.10.5数据库设计的其他问题
7.11总结
术语回顾
实践习题
习题
工具
文献注解
第8章 关系数据库设计
8.1好的关系设计的特点
8.1.1设计选择:更大的模式
8.1.2设计选择:更小的模式
8.2原子域和第一范式
8.3使用函数依赖进行分解
8.3.1码和函数依赖
8.3.2Boyce-Codd范式
8.3.3BCNF和保持依赖
8.3.4第三范式
8.3.5更高的范式
8.4函数依赖理论
8.4.1函数依赖集的闭包
8.4.2属性集的闭包
8.4.3正则覆盖
8.4.4无损分解
8.4.5保持依赖
8.5分解算法
8.5.1BCNF分解
8.5.23NF分解
8.5.33NF算法的正确性
8.5.4BCNF和3NF的比较
8.6使用多值依赖的分解
8.6.1多值依赖
8.6.2第四范式
8.6.34NF分解
8.7更多的范式
8.8数据库设计过程
8.8.1E-R模型和规范化
8.8.2属性和联系的命名
8.8.3为了性能去规范化
8.8.4其他设计问题
8.9时态数据建模
8.10总结
术语回顾
实践习题
习题
文献注解
第9章 应用设计和开发
9.1应用程序和用户界面
9.2Web基础
9.2.1统一资源定位符
9.2.2超文本标记语言
9.2.3Web服务器和会话
9.3servlet和JSP
9.3.1一个servlet的例子
9.3.2servlet会话
9.3.3servlet的生命周期
9.3.4servlet支持
9.3.5服务器端脚本
9.3?6客户端脚本
9.4应用架构
9.4.1业务逻辑层
9.4.2数据访问层和对象-关系映射
9.4.3Web服务
9.4.4断连操作
9.5快速应用开发
9.5.1构建用户界面的工具
9.5.2Web应用框架
9.5.3报表生成器
9.6应用程序性能
9.6.1利用缓存减少开销
9.6.2并行处理
9.7应用程序安全性
9.7.1SQL注入
9.7.2跨站点脚本和请求伪造
9.7.3密码泄露
9.7.4应用程序认证
9.7.5应用级授权
9.7.6审计追踪
9.7.7隐私
9.8加密及其应用
9.8.1加密技术
9.8.2数据库中的加密支持
9.8.3加密和认证
9.9总结
术语回顾
实践习题
习题
项目建议
工具
文献注解
第三部分 数据存储和查询
第10章 存储和文件结构
10.1物理存储介质概述
10.2磁盘和快闪存储器
10.2.1磁盘的物理特性
10.2.2磁盘性能的度量
10.2.3磁盘块访问的优化
10.2.4快闪存储
10.3RAID
10.3.1通过冗余提高可靠性
10.3.2通过并行提高性能
10.3.3RAID级别
10.3.4RAID级别的选择
10.3.5硬件问题
10.3.6其他的RAID应用
10.4第三级存储
10.4.1光盘
10.4.2磁带
10.5文件组织
10.5.1定长记录
10.5.2变长记录
10.6文件中记录的组织
10.6.1顺序文件组织
10.6.2多表聚簇文件组织
10.7数据字典存储
10.8数据库缓冲区
10.8.1缓冲区管理器
10.8.2缓冲区替换策略
10.9总结
术语回顾
实践习题
习题
文献注解
第11章 索引与散列
11.1基本概念
11.2顺序索引
11.2.1稠密索引和稀疏索引
11.2.2多级索引
11.2.3索引的更新
11.2.4辅助索引
11.2.5多码上的索引
11.3B+树索引文件
11.3.1B+树的结构
11.3.2B+树的查询
11.3.3B+树的更新
11.3.4不唯一的搜索码
11.3.5B+树更新的复杂性
11.4B+树扩展
11.4.1B+树文件组织
11.4.2辅助索引和记录重定位
11.4.3字符串上的索引
11.4.4B+树索引的批量加载
11.4.5B树索引文件
11.4.6闪存
11.5多码访问
11.5.1使用多个单码索引
11.5.2多码索引
11.5.3覆盖索引
11.6静态散列
11.6.1散列函数
11.6.2桶溢出处理
11.6.3散列索引
11.7动态散列
11.7.1数据结构
11.7.2查询和更新
11.7.3静态散列与动态散列比较
11.8顺序索引和散列的比较
11.9位图索引
11.9.1位图索引结构
11.9.2位图操作的高效实现
11.9.3位图和B+树
11.10SQL中的索引定义
11.11总结
术语回顾
实践习题
习题
文献注解
第12章 查询处理
12.1概述
12.2查询代价的度量
12.3选择运算
12.3.1使用文件扫描和索引的选择
12.3.2涉及比较的选择
12.3.3复杂选择的实现
12.4排序
12.4.1外部排序归并算法
12.4.2外部排序归并的代价分析
12.5连接运算
12.5.1嵌套循环连接
12.5.2块嵌套循环连接
12.5.3索引嵌套循环连接
12.5.4归并连接
12.5.5散列连接
12.6其他运算
12.6.1去除重复
12.6.2投影
12.6.3集合运算
12.6.4外连接
12.6.5聚集
12.7表达式计算
12.7.1物化
12.7.2流水线
12.8总结
术语回顾
实践习题
习题
文献注解
第13章 查询优化
13.1概述
13.2关系表达式的转换
13.2.1等价规则
13.2.2转换的例子
13.2.3连接的次序
13.2.4等价表达式的枚举
13.3表达式结果集统计大小的估计
13.3.1目录信息
13.3.2选择运算结果大小的估计
13.3.3连接运算结果大小的估计
13.3.4其他运算的结果集大小的估计
13.3.5不同取值个数的估计
13.4执行计划选择
13.4.1基于代价的连接顺序选择
13.4.2采用等价规则的基于代价的优化器
13.4.3启发式优化
13.4.4嵌套子查询的优化**
13.5物化视图**
13.5.1视图维护
13.5.2增量的视图维护
13.5.3查询优化和物化视图
13.5.4物化视图和索引选择
13.6查询优化中的高级话题**
13.6.1top-K优化
13.6.2连接极小化
13.6.3更新的优化
13.6.4多查询优化和共享式扫描
13.6.5参数化查询优化
13.7总结
术语回顾
实践习题
习题
文献注解
第四部分 事务管理
第14章 事务
14.1事务概念
14.2一个简单的事务模型
14.3存储结构
14.4事务原子性和持久性
14.5事务隔离性
14.6可串行化
14.7事务隔离性和原子性
14.7.1可恢复调度
14.7.2无级联调度
14.8事务隔离性级别
14.9隔离性级别的实现
14.9.1锁
14.9.2时间戳
14.9.3多版本和快照隔离
14.10事务的SQL语句表示
14.11总结
术语回顾
实践习题
习题
文献注解
第15章 并发控制
15?1基于锁的协议
15?1?1锁
15.1.2锁的授予
15.1.3两阶段封锁协议
15.1.4封锁的实现
15.1.5基于图的协议
15.2死锁处理
15.2.1死锁预防
15.2.2死锁检测与恢复
15.3多粒度
15.4基于时间戳的协议
15.4.1时间戳
15.4.2时间戳排序协议
15.4.3Thomas写规则
15.5基于有效性检查的协议
15.6多版本机制
15.6.1多版本时间戳排序
15.6.2多版本两阶段封锁
15.7快照隔离
15.7.1更新事务的有效性检验步骤
15.7.2串行化问题
15.8插入操作、删除操作与谓词读
15.8.1删除
15.8.2插入
15.8.3谓词读和幻象现象
15.9实践中的弱一致性级别
15.9.1二级一致性
15.9.2游标稳定性
15.9.3跨越用户交互的并发控制
15.10索引结构中的并发**
15.11总结
术语回顾
实践习题
习题
文献注解
第16章 恢复系统
16.1故障分类
16.2存储器
16.2.1稳定存储器的实现
16.2.2数据访问
16.3恢复与原子性
16.3.1日志记录
16.3.2数据库修改
16.3.3并发控制和恢复
16.3.4事务提交
16.3.5使用日志来重做和撤销事务
16.3.6检查点
16.4恢复算法
16.4.1事务回滚
16.4.2系统崩溃后的恢复
16.5缓冲区管理
16.5.1日志记录缓冲
16.5.2数据库缓冲
16.5.3操作系统在缓冲区管理中的作用
16.5.4模糊检查点
16.6非易失性存储器数据丢失的故障
16.7锁的提前释放和逻辑undo操作
16.7.1逻辑操作
16.7.2逻辑undo日志记录
16.7.3有逻辑undo的事务回滚
16.7.4逻辑undo中的并发问题
16.8ARIES**
16.8.1数据结构
16.8.2恢复算法
16.8.3其他特性
16.9远程备份系统
16.10总结
术语回顾
实践习题
习题
文献注解
第五部分 系统体系结构
第17章 数据库系统体系结构
17.1集中式与客户-服务器体系结构
17.1.1集中式系统
17.1.2客户-服务器系统
17.2服务器系统体系结构
17.2.1事务服务器
17.2.2数据服务器
17.2.3基于云的服务器
17.3并行系统
17.3.1加速比和扩展比
17.3.2互连网络
17.3.3并行数据库体系结构
17.4分布式系统
17.4.1分布式数据库示例
17.4.2实现问题
17.5网络类型
17.5.1局域网
17.5.2广域网
17.6总结
术语回顾
实践习题
习题
文献注解
第18章 并行数据库
18. 1引言
18.2I/O并行
18.2.1划分技术
18.2.2划分技术比较
18.2.3偏斜处理
18.3查询间并行
18.4查询内并行
18.5操作内并行
18.5.1并行排序
18.5.2并行连接
18.5.3其他关系运算
18.5.4运算的并行计算代价
18.6操作间并行
18.6.1流水线并行
18.6.2独立并行
18.7查询优化
18.8并行系统设计
18.9多核处理器的并行性
18.9.1并行性与原始速度
18.9.2高速缓冲存储器和多线程
18.9.3适应现代体系架构的数据库系统设计
18.10总结
术语回顾
实践习题
习题
文献注解
第19章 分布式数据库
19.1同构和异构数据库
19.2分布式数据存储
19.2.1数据复制
19.2.2数据分片
19.2.3透明性
19.3分布式事务
19.3.1系统结构
19.3.2系统故障模式
19.4提交协议
19.4.1两阶段提交
19.4.2三阶段提交
19.4.3事务处理的可选择性模型
19.5分布式数据库中的并发控制
19.5.1封锁协议
19.5.2时间戳
19.5.3弱一致性级别的复制
19.5.4死锁处理
19.6可用性
19.6.1基于多数的方法
19.6.2读一个、写所有可用的方法
19.6.3站点重建
19.6.4与远程备份的比较
19.6.5协调器的选择
19.6.6为可用性而牺牲一致性
19.7分布式查询处理
19. 7.1查询转换
19.7.2简单的连接处理
19.7.3半连接策略
19.7.4利用并行性的连接策略
19.8异构分布式数据库
19.8.1数据统一视图
19.8.2查询处理
19.8.3多数据库中的事务管理
19.9基于云的数据库
19.9.1云上的数据存储系统
19.9.2云上的传统数据库
19.9.3基于云的数据库的挑战
19.10目录系统
19.10.1目录访问协议
19.10.2LDAP:轻量级目录访问协议
19.11总结
术语回顾
实践习题
习题
文献注解
第六部分 数据仓库、数据挖掘与信息检索
第20章 数据仓库与数据挖掘
20.1决策支持系统
20.2数据仓库
20.2.1数据仓库成分
20.2.2数据仓库模式
20.2.3面向列的存储
20.3数据挖掘
20.4分类
20.4.1决策树分类器
20.4.2其他类型的分类器
20.4.3回归
20.4.4分类器验证
20.5关联规则
20.6其他类型的关联
20.7聚类
20.8其他类型的数据挖掘
20.9总结
术语回顾
实践习题
习题
工具
文献注解
第21章 信息检索
21.1概述
21.2使用术语的相关性排名
21.2.1使用TF-IDF的排名方法
21.2.2基于相似性的检索
21.3使用超链接的相关性
21.3.1流行度排名
21.3.2PageRank
21.3.3其他的流行度度量
21.3.4搜索引擎作弊
21.3.5将TF-IDF和流行度排名度量方法结合
21.4同义词、多义词和本体
21.5文档的索引
21.6检索的有效性度量
21.7Web的抓取和索引
21.8信息检索:网页排名之外
21.8.1查询结果的多样化
21.8.2信息抽取
21.8.3问答系统
21.8.4查询结构化数据
21.9目录与分类
21.10总结
术语回顾
实践习题
习题
工具
文献注解
第七部分 特种数据库
第22章 基于对象的数据库
22.1概述
22.2复杂数据类型
22.3SQL中的结构类型和继承
22.3.1结构类型
22.3.2类型继承
22.4表继承
22.5SQL中的数组和多重集合类型
22.5.1创建和访问集合体值
2.5.2查询以集合体为值的属性
22.5.3嵌套和解除嵌套
22.6SQL中的对象标识和引用类型
22.7 O-R特性的实现
22.8持久化程序设计语言
22.8.1对象的持久化
22.8.2对象标识和指针
22.8.3持久对象的存储和访问
22.8.4持久化C++系统
22.8.5持久化Java系统
22.9对象-关系映射
22.10面向对象与对象-关系
22.11总结
术语回顾
实践习题
习题
工具
文献注解
第23章 XML
23.1动机
23.2XML数据结构
23.3XML文档模式
23.3.1文档类型定义
23.3.2XML Schema
23.4查询和转换
23.4.1XML树模型
23.4.2XPath
23.4.3XQuery
23.5XML应用程序接口
23.6XML数据存储
23.6.1非关系的数据存储
23.6.2关系数据库
23.6.3SQL/XML
23.7XML应用
23.7.1存储复杂结构数据
23.7.2标准化数据交换格式
23.7.3Web服务
23.7.4数据中介
23.8总结
术语回顾
实践习题
习题
工具
文献注解
第八部分 高级主题
第24章 高级应用开发
24.1性能调整
24.1.1提高面向集合的特性
24.1.2批量加载和更新的调整
24.1.3瓶颈位置
24.1.4可调参数
24.1.5硬件调整
24.1.6模式调整
24.1.7索引调整
24.1.8使用物化视图
24.1.9物理设计的自动调整
24.1.10并发事务调整
24.1.11性能模拟
24.2性能基准程序
24.2.1任务集
24.2.2数据库应用类型
24.2.3TPC基准程序
24.3应用系统开发的其他问题
24.3.1应用系统测试
24.3.2应用系统移植
24.4标准化
24.4.1SQL标准
24.4.2数据库连接标准
24.4.3对象数据库标准
24.4.4基于XML的标准
24.5总结
术语回顾
实践习题
习题
文献注解
第25章 时空数据和移动性
25.1动机
25.2数据库中的时间
25.2.1SQL中的时间规范
25.2.2时态查询语言
25.3空间与地理数据
25.3.1几何信息表示
25.3.2设计数据库
25.3.3地理数据
25.3.4空间查询
25.3.5空间数据的索引
25.4多媒体数据库
25.4.1多媒体数据格式
25.4.2连续媒体数据
25.4.3基于相似性的检索
25.5移动性和个人数据库
25.5.1移动计算模型
25.5.2路由和查询处理
25.5.3广播数据
25.5.4连接断开与一致性
25.6总结
术语回顾
实践习题
习题
文献注解
26章 高级事务处理
26.1事务处理监控器
26.1.1TP监控器体系结构
26.1.2使用TP监控器进行应用协调
26.2事务工作流
26.2.1工作流说明
26.2.2工作流的故障原子性需求
26.2.3工作流执行
26.2.4工作流恢复
26.2.5工作流管理系统
26.3电子商务
26.3.1电子目录
26.3.2市场
26.3.3订单结算
26.4主存数据库
26.5实时事务系统
26.6长事务
26.6.1不可串行化的执行
26.6.2并发控制
26.6.3嵌套事务和多级事务
26.6.4补偿事务
26.6.5实现问题
26.7总结
术语回顾
实践习题
习题
文献注解
第九部分 实例研究
第27章 PostgreSQL
27.1概述
27.2用户界面
27.2.1交互式终端界面
27.2.2图形界面
27.2.3编程语言接口
27.3SQL变化和扩展
27.3.1PostgreSQL类型
27.3.2规则和其他主动数据库特征
27.3.3可扩展性
27.4PostgreSQL中的事务管理
27.4.1PostgreSQL的并发控制
27.4.2恢复
27.5存储和索引
27.5.1表
27.5.2索引
27.6查询处理和优化
27.6.1查询重写
27.6.2查询规划和优化
27.6.3查询执行器
27.6.4触发器和约束
27.7系统结构
文献注解
第28章 Oracle
28.1数据库设计和查询工具
28.1.1数据库和应用设计工具
28.1.2查询工具
28.2SQL的变化和扩展
28.2.1对象-关系特性
28.2.2Oracle XML DB
28.2.3过程化语言
28.2.4维度
28.2.5联机分析处理
28.2.6触发器
28.3存储和索引
28.3.1表空间
28.3.2段
28.3.3表
28.3.4索引
28.3.5位图索引
28.3.6基于函数的索引
28.3.7连接索引
28.3.8域索引
28.3.9划分
28.3.10物化视图
28.4查询处理和优化
28.4.1执行方法
28.4.2优化
28.4.3并行执行
28.4.4结果高速缓存
28.5并发控制与恢复
28.5.1并发控制
28.5.2恢复的基本结构
28.5.3Oracle数据卫士
28.6系统体系结构
28.6.1专用服务器:内存结构
28.6.2专用服务器:进程结构
28.6.3共享服务器
28.6.4Oracle Real Application Clusters
28.6.5自动存储管理器
28.6.6Oracle Exadata
28.7复制、分布以及外部数据
28.7.1复制
28.7.2分布式数据库
28.7.3外部数据源
28.8数据库管理工具
28.8.1Oracle企业管理器
28.8.2自动工作负载存储
28.8.3数据库资源管理
28.9数据挖掘
文献注解
第29章 IBM DB2 Universal Database
29.1概述
29.2数据库设计工具
29.3SQL的变化和扩展
29.3.1XML特性
29.3.2数据类型的支持
29.3.3用户自定义函数和方法
29.3.4大对象
29.3.5索引扩展和约束
29.3.6Web服务
29.3.7其他特性
29.4存储和索引
29.4.1存储体系结构
29.4.2缓冲池
29.4.3表、记录和索引
29.5多维聚簇
29.5.1块索引
29.5.2块映射
29.5.3设计考虑
29.5.4对现有技术的影响
29.6查询处理和优化
29.6.1存取方法
29.6.2连接、聚集和集合运算
29.6.3对复杂SQL处理的支持
29.6.4多处理器查询处理特性
29.6.5查询优化
29.7物化的查询表
29.7.1查询路由到MQT
29.7.2MQT的维护
29.8DB2中的自治特性
29.8.1配置
29.8.2优化
29.9工具和实用程序
29.10并发控制和恢复
29.10.1并发与隔离
29.10.2提交与回滚
29.10.3日志与恢复
29.11系统体系结构
29.12复制、分布和外部数据
29.13商务智能特性
文献注解
第30章 Microsoft SQL Server
30.1管理、设计和查询工具
30.1.1数据库开发和可视化数据库工具
30.1.2数据库查询和调优工具
30.1.3SQL Server Management Studio
30.2SQL变化和扩展
30.2.1数据类型
30.2.2查询语言增强
30.2.3例程
30.2.4带过滤的索引
30.3存储和索引
30.3.1文件组
30.3.2文件组内的空间管理
30.3.3表
30.3.4索引
30.3.5分区
30.3.6在线创建索引
30.3.7扫描和预读
30.3.8压缩
30.4查询处理和优化
30.4.1编译处理概述
30.4.2查询简化
30.4.3重排序和基于代价的优化
30.4.4更新计划
30.4.5优化时的数据分析
30.4.6部分搜索和启发式搜索
30.4.7查询执行
30.5并发与恢复
30.5.1事务
30.5.2封锁
30.5.3恢复和可用性
30.6系统体系结构
30.6.1服务器上的线程池
30.6.2内存管理
30.6.3安全性
30.7数据访问
30.8分布式异构查询处理
30.9复制
30.9.1复制模型
30.9.2复制选项
30.10.NET中的服务器编程
30.10.1.NET基本概念
30.10.2SQL CLR宿主
30.10.3可扩展性协定
30.11XML支持
30.11.1本地存储和组织XML
30.11.2查询和更新XML数据类型
30.11.3XQuery表达式的执行
30.12SQL Server服务代理
30.13商务智能
30.13.1SQL Server集成服务
30.13.2SQL Server分析服务
30.13.3SQL Server报表服务
文献注解
第十部分 附录
附录A详细的大学模式
参考文献
索引
内容介绍
本书是经典的数据库系统教科书《Database System Concepts》的最新修订版,全面介绍数据库系统的各种知识,透彻阐释数据库管理的基本概念。本书内容丰富,不仅讨论了关系数据模型和关系语言、数据库设计过程、关系数据库理论、数据库应用设计和开发、数据存储结构、数据存取技术、查询优化方法、事务处理系统和并发控制、故障恢复技术、数据仓库和数据挖掘,而且对性能调整、性能评测标准、数据库应用测试和标准化、空间和地理数据、时间数据、多媒体数据、移动和个人数据库管理以及事务处理监控器、事务工作流、电子商务、高性能事务系统、实时事务系统和持续长时间的事务等高级应用主题进行了广泛讨论。
本书既可作为高年级本科生或低年级研究生的数据库课程教材,也可供数据库领域的技术人员参考。
高可用MySQL(第2版)英文原版 MySQL High Availability, 2nd Edition
前言 xxi
第 1章 引言 2
第 2章 MySQLReplicant库 8
第 3章 MySQL复制原理 18
第 4章 二进制日志 45
第 5章 面向高可用性的复制 112
第 6章 面向横向扩展的 MySQL复制 138
第 7章 数据分片 171
第 8章 深入复制 204
第 9章 MySQL集群 263
第 10章 监控入门 300
第 11章 监控 MySQL 339
第 12章 监控存储引擎 403
第 13章 监控复制 432
第 14章 复制的故障排除 454
第 15章 保护你的资产 481
第 16章 MySQL企业版监控 530
第 17章 使用 MySQL实用工具管理 MySQL复制 553
附录A 复制的提示和技巧617
附录B 一个 GTID的实现 634
索引 645
深入理解计算机系统第二版中文 清晰 带目录
深入理解计算机系统第二版中文 清晰 带目录