新書推薦:
《
津轻:日本无赖派文学代表太宰治自传性随笔集
》
售價:HK$
66.7
《
河流之齿
》
售價:HK$
59.8
《
新经济史革命:计量学派与新制度学派
》
售價:HK$
89.7
《
盗墓笔记之秦岭神树4
》
售價:HK$
57.3
《
战胜人格障碍
》
售價:HK$
66.7
《
逃不开的科技创新战争
》
售價:HK$
103.3
《
漫画三国一百年
》
售價:HK$
55.2
《
希腊文明3000年(古希腊的科学精神,成就了现代科学之源)
》
售價:HK$
82.8
|
編輯推薦: |
DBA“老兵”薛晓刚及其团队奉献给广大同仁的数据库实践经验集,内容涵盖数据库性能调优、故障处理、架构设计、数据同步、SQL算法等诸多内容,解读广大数据库从业者普遍关心的技术问题。
本书由盖国强、白鳝(徐戟)、贺仁龙倾情作序,周正中(德哥)、侯圣文、耿航、吴洋鼎力推荐。
全书采用全彩印刷,阅读体验佳;全书内容丰富,通过剖析众多真实案例,解读原理、分享技巧、提供思路,内容具备较强的启发性和指导性。
是广大应用开发人员、DBA、业务架构师、IT架构师、数据架构师、数据分析师、系统架构师、解决方案架构师和企业高级管理人员值得一读的实用手册。
|
內容簡介: |
本书是一本指导DBA进行数据库开发和运维的实用手册,本书共9章,包括漫谈数据库、如何提升数据库性能、如何运维好数据库、如何进行数据库设计、如何做好数据库之间的数据同步、认识HTAP技术、认识数据库的功能原理、认识数据库中的数学(逻辑与算法),以及DBA的日常:数据库管理及开发的最佳实践。另有附录DBA杂谈。
本书内容是资深DBA多年实践经验的归纳总结,涵盖DBA日常工作中的主要方面,通过剖析众多的真实案例,并解读原理、分享技巧、提供思路,内容具备较强的启发性和指导性。
本书的受众包括但不限于想要了解如何提升数据库性能的应用开发人员、DBA、业务架构师、IT架构师、数据架构师、数据分析师、系统架构师、解决方案架构师和企业高级管理人员。
|
關於作者: |
薛晓刚,现任欧冶云商股份有限公司数据库首席师,曾服务于政府、公安、交通、安防、金融、支付等行业。拥有Oracle、MySQL、PostgreSQL、TiDB、OceanBase、达梦等数据库认证,是Oracle ACE-Pro ( Database )、PostgreSQL ACE Partner、腾讯云TVP、阿里云MVP、TiDB MVA、墨天轮MVP;Oracle OCP认证讲师,MySQL OCP认证讲师;ITPUB论坛内存数据库版主、核心专家、金牌顾问。ITPUB培训专家百人团成员,国内数据库风云百人团成员,OceanBase数据库观察团团长,TiDB布道师、布道师组委会会员。中国信息通信研究院创新实验室成员,开放原子开源基金会OpenTenBase工委会委员,机械工业出版社专家委员会委员。
王明杰,德国布伦瑞克工业大学工学博士,现任职于欧冶云商股份有限公司,担任物联网技术一级首席,致力于物联感知、机器视觉、智能自动化等新技术在钢铁行业供应链体系中的应用融合。负责编写本书物联网场景及时序数据库的相关内容。
宋希,波尔多大学数学系博士,现任职于欧冶云商股份有限公司,资深算法工程师,主持搭建综合平台智能推荐系统,参与需求预测、用户画像、在线交易压力测试等多个项目,获得多项专利。负责编写本书的动态规划的相关内容。
李欢,现任职于字节跳动,作为移动端音视频开发工程师负责抖音直播连线架构设计,优化抖音音视频用户体验,提升直播连线的性能。负责本书移动端数据库部分相关内容的编写。
|
目錄:
|
目录
序言1
序言2
序言3
前言
第1章 漫谈数据库1
1.1 什么是数据库2
1.2 数据库发展史2
1.2.1 国外数据库的历史2
1.2.2 国内数据库的历史4
1.3 数据库的主要分类6
1.3.1 关系数据库:传统交易数据库6
1.3.2 键值数据库:基于KV键值对的内存数据库7
1.3.3 列式数据库:列式存储的分析型数据库9
1.3.4 文档型数据库:松散型数据结构的数据库10
1.3.5 图数据库:用于社交图谱的数据库11
1.3.6 时序数据库:适用于物联网场景的数据库12
1.3.7 搜索引擎数据库:全文索引的数据库14
1.3.8 多模数据库:具有多种数据库模式的融合数据库17
1.3.9 最容易忽视的数据库—移动端数据库19
1.4 数据库应用的发展趋势22
1.4.1 国外数据库应用发展趋势22
1.4.2 国内数据库应用发展趋势24
1.5 数据库与新兴数字技术30
1.5.1 数据库与大数据技术30
1.5.2 数据库的延伸:区块链、物联网32
1.6 与数据库长相厮守的DBA33
1.6.1 DBA的定义与内涵33
1.6.2 DBA的工作职责34
1.6.3 DBA需要具备的能力35
1.6.4 DBA的价值35
1.6.5 DBA是可以做一辈子的职业36
第2章 如何提升数据库性能38
2.1 通过索引提升性能39
2.1.1 索引的概念及原理39
2.1.2 索引的种类44
2.1.3 规避索引使用的误区68
2.1.4 通过索引实现海量数据中的高效查询70
2.1.5 自动化索引:数据库自治的趋势71
2.2 通过SQL优化提升性能78
2.2.1 SQL优化实现高速执行任务79
2.2.2 慎用分页有效提升性能86
2.2.3 从认知上杜绝低效SQL89
2.3 避免数据库对象设计失误91
2.3.1 避免不必要的多表关联导致的低效查询91
2.3.2 避免动态计算结果没有单独存储导致的低效查询93
2.3.3 避免没有明确需求查询条件导致的低效查询97
2.3.4 避免过度分表98
2.4 从识别需求的合理性提升性能101
2.4.1 拒绝无效需求101
2.4.2 正确理解开发需求104
2.4.3 拒绝不合理的需求106
2.4.4 引导业务改善需求107
2.5 减少IO操作提升数据库性能108
2.5.1 正确认识数据库的性能108
2.5.2 减少IO交互—批量写入数据(MySQL)110
2.5.3 减少IO交互—批量写入数据(Oracle)122
2.5.4 减少IO交互—批量写入数据(PostgreSQL)123
2.5.5 精简架构127
第3章 如何运维好数据库130
3.1 运维好数据库的关键:处理故障131
3.1.1 常见的数据库故障类型131
3.1.2 数据库故障的危害132
3.2 分析处理数据库故障的关键点133
3.2.1 分析数据库故障的主要原因—SQL133
3.2.2 分析SQL的主要问题—处理速度慢134
3.2.3 分析数据库参数对数据库的影响134
3.2.4 分析硬件短板带来的问题—IO吞吐能力与CPU计算能力135
3.3 数据库故障处理的典型案例分析138
3.3.1 一次Elasticsearch误删除的故障分析139
3.3.2 一次配置文件丢失导致的MySQL数据库故障分析141
3.3.3 一次In-Memory丢失引起的故障分析146
3.3.4 一次疑似分区查询异常的故障分析150
3.3.5 一次数据库归档导致的故障分析159
3.3.6 一次数据库binlog写入失败的故障分析163
3.3.7 一次两表关联导致的故障分析165
3.3.8 数据库连接数与连接复用不当的故障分析166
3.3.9 一次数据库CPU使用率100%的故障分析168
3.3.10 一次数据库索引不当引起的故障分析169
3.3.11 一次数据库主从延迟过大的故障分析172
3.3.12 一次数据库主从不一致的故障分析174
3.3.13 一次Redis数据库无法启动的故障分析182
3.3.14 一次MySQL数据库数据类型不恰当导致的故障183
3.3.15 一次数据库全表查询的优化187
第4章 如何进行数据库设计197
4.1 数据库都有哪些架构198
4.1.1 集中式架构198
4.1.2 分布式架构200
4.1.3 数据库内部的体系架构201
4.1.4 “烟囱”式的数据库架构201
4.1.5 独立业务线的数据库架构202
4.2 根据实际场景选择数据库架构203
4.3 五个维度谈数据库选型203
4.3.1 从业务场景特征维度204
4.3.2 从数据规模大小维度204
4.3.3 从用户自身开发团队能力维度205
4.3.4 从用户自身运维团队能力维度205
4.3.5 从公司管理能力维度206
4.4 数据库拆分的利与弊206
4.4.1 数据库拆分的背景207
4.4.2 数据库拆分的三大问题:一致性、数据关联、数据同步208
4.4.3 分表带来的问题:一致性、聚合、排序、扩缩容208
4.5 如何看待数据库的合并210
4.5.1 为何要做数据库合并210
4.5.2 数据库合并的意义:降成本、提升稳定性211
4.5.3 数据库合并带来的问题:鸡蛋放在一个篮子里211
4.5.4 数据库合并的前提:高质量SQL、硬件的进步、稳定的基础环境212
4.6 CAP理论与分布式数据库212
4.6.1 CAP理论概述213
4.6.2 CAP理论的延展213
4.6.3 分库分表不是分布式数据库214
4.7 如何看待数据库与中间件215
4.7.1 数据库与中间件:上下游的“难兄难弟”215
4.7.2 中间件内存溢出的原因:源头还是数据库215
4.7.3 适当减少数据库与中间件的数量:避免不必要的故障节点216
第5章 如何做好数据库之间的数据同步217
5.1 数据同步的作用218
5.1.1 实现数据传输218
5.1.2 实现数据汇聚218
5.1.3 实现数据迁移219
5.2 数据库同步的分类219
5.2.1 同构数据库的同步219
5.2.2 异构数据库的同步219
5.2.3 数据库到消息队列的同步219
5.2.4 数据库到Hadoop的数据同步219
5.3 同构数据库数据同步的示例220
5.3.1 使用dblink实现Oracle数据库之间的数据同步220
5.3.2 使用物化视图实现远程Oracle数据库之间的数据同步226
5.3.3 使用插件实现MySQL数据库之间的数据同步231
5.3.4 利用数据同步实现MySQL的版本升级234
5.3.5 采用多源复制的功能实现MySQL数据库之间的数据同步239
5.3.6 采用主从模式实现PostgreSQL主从数据同步242
5.4 异构数据库同步的实例—基于OGG248
5.4.1 CDC简介248
5.4.2 OGG概述249
5.4.3 OGG微服务版的安装部署249
5.4.4 使用OGG for Oracle实现Oracle数据库之间的数据同步251
5.4.5 使用OGG for MySQL实现MySQL与异构数据库的同步279
5.4.6 使用OGG for BigData实现大数据组件与异构数据库的数据同步284
第6章 认识HTAP技术294
6.1 HTAP的概念及其价值295
6.1.1 HTAP:混合事物/分析处理295
6.1.2 HTAP的价值295
6.2 HTAP的几种实现方式297
6.2.1 垂直方向的实现:以Oracle数据库为例297
6.2.2 水平方向的实现:以MySQL、TiDB数据库为例298
6.2.3 其他类型数据库的实现方式298
第7章 认识数据库的功能原理300
7.1 优化器—基于统计学原理301
7.2 数据库的查询—火山模型316
7.3 数据库AI—向量化319
7.4 编译执行323
第8章 认识数据库中的数学(逻辑与算法)326
8.1 数据库中的典型逻辑与算法327
8.1.1 从斐波那契数列到数据分析327
8.1.2 增加数据维度处理—减少关联332
8.1.3 多表关联算法—一对多与多对多336
8.1.4 排除处理算法—笛卡儿积341
8.1.5 函数算法—对SQL的影响348
8.2 动态规划法在数据库中的应用351
8.2.1 动态规划原理1:爬楼梯351
8.2.2 动态规划原理2:背包问题355
8.2.3 动态规划的五部曲361
8.3 数据库开发中的逻辑思维362
8.3.1 元数据的空与非空362
8.3.2 优化器处理极值和极限:加速查询速度369
8.3.3 并发处理热点的逻辑:避免锁371
8.3.4 减库存的逻辑:从设计出发防止超卖373
第9章 DBA的日常:数据库管理及开发的最佳实践375
9.1 七个针对数据库特性的最佳实践376
9.1.1 Oracle的DML重定向376
9.1.2 Oracle的资源隔离381
9.1.3 MySQL的延迟复制—挽救误删除389
9.1.4 PostgreSQL的延迟复制395
9.1.5 数据库对于磁盘IO吞吐的要求402
9.2 面向执行器和优化器的最佳实践403
9.2.1 主流数据库的事务异常处理机制对比(MySQL、PostgreSQL、Oracle)403
9.2.2 MySQL和达梦两个数据库优化器的对比406
9.2.3 SQL语句的解析过程分析407
9.2.4 优化器的多表关联411
9.2.5 SQL使用in进行子查询412
9.2.6 数据归档和数据迁移419
9.3 数据库的复制(克隆)与高可用受控切换的最佳实践424
9.3.1 Oracle的PDB数据库克隆425
9.3.2 MySQL克隆的关键点428
9.3.3 MySQL的MGR架构以及受控切换431
9.3.4 PostgreSQL的高可用切换434
9.3.5 Redis的高可用切换440
9.4 三个SQL编写的最佳实践445
9.4.1 关于MyBatis开发框架使用绑定变量的实践445
9.4.2 使用exists的SQL语句的改写451
9.4.3 设计上出发减少SQL的标量子查询458
9.5 时序数据库使用的最佳实践463
9.5.1 时序数据库的数据库表设计463
9.5.2 时序数据库的数据分析466
附录 DBA杂谈468
|
內容試閱:
|
前言
为什么要写这本书
数据库是一个独立的技术领域,几乎所有的后端开发都要和数据库(关系数据库和非关系数据库)打交道,不读写数据库的后端应用程序几乎不存在。而应用程序中50%的代码甚至极端情况下80%的代码都是SQL。所以与其说应用程序开发不如说是基于数据库的应用开发。
作为本书的第一作者,笔者一开始并没有从事真正意义上的数据库工作,而是从其他工作岗位转到数据库岗位的。在经过前辈和名师指导后才慢慢了解了数据库。后来还成为数据库的认证讲师,培训过的学员来自各行各业,有近千人之多。
在不断深入了解数据库的过程中,笔者发现很多研发问题归根结底都是数据库的问题,而且发现并解决这些数据库的相关问题,可以帮助和指导研发人员更好地开展工作,于是就全身心地投入到了数据库的应用、运维、设计、架构、治理等相关工作中。在多年的工作和授课中,笔者还发现,即便是有多年工作经验的DBA也仍然对数据库技术有很多误解和错误的认知,很多基于数据库技术的问题和教训反反复复地出现,而且这些问题在全国范围内也具有很强的共性。
因此,笔者决定撰写一本介绍数据库管理与运维、数据架构以及数据库开发技巧的书籍来为广大DBA解惑,让开发人员知道如何使用数据库,让DBA知道如何指导开发人员更好地进行应用的设计。希望开发人员和DBA都明白数据才是架构的中心。具体来说,笔者希望这本书起到以下作用。
分享经验:笔者和笔者带领的团队在实践中积累了大量的经验和实践方法,这对于企业数据库的开发、运维、设计、架构十分有价值。我们通过本书把这些经验和方法加以总结,供广大DBA和开发人员参考,帮助他们更好地发挥出数据库应有的性能,解决或避免大部分在应用开发层面出现的问题和故障,让读者少走一些弯路。
DBA重新定位:希望通过这本书,让广大DBA明确自己的职业规划和定位,认识想运维好数据库就要从幕后走到台前,不是单纯地去应对需求,而是指导开发人员编写好的SQL,一方面提升工作效率,另一方面提升自身价值。从运维“小工”成长为更具价值的架构师。
降低企业IT成本:本书分享的经验、实施方法论和案例,可以为广大企业提供非常有价值的借鉴。希望通过这本书,帮助广大企业降低数据库的故障率,提升系统的稳定性。通过选择合适的数据架构,避免因为数据库导致的架构复杂而产生的高昂的IT成本。
开发人员能力提升:希望通过本书给开发岗位的读者一些思路,不再做“CRUD工程师”,而是成为可以集设计和开发于一身、从事企业智能化应用建设和咨询的专家,更好地帮助企业实现数字化转型和智能化应用的建设。
构建生态圈:我们希望通过这本书可以广结朋友,无论是DBA、开发者,还是从事企业数字化建设的朋友。希望广大读者朋友可以通过这本书加入到DBA交流群中(扫描封面勒口二维码加入),能够相互学习、相互启发、共同进步。
本书的内容
本书内容具体介绍如下。
第 1 章 漫谈数据库。介绍了数据库的概念和数据库的分类,通过本章,读者将了解到主流的数据库种类以及数据库技术的发展趋势,包括大数据、区块链这些数据库技术栈和DBA与数据库的关系。
第 2 章 如何提升数据库性能。介绍数据库性能优化技术,并对不同类型的索引进行了分类和介绍,还介绍了从优化需求和设计两个方面来提升数据库性能的具体案例。
第 3 章 如何运维好数据库。介绍数据库的主要故障类型和现象,列举了十几种各式各样的数据库故障案例及故障原因分析。
第 4 章 如何进行数据库设计。介绍了数据库选型、数据库架构设计以及数据库分开与合并的优缺点。
第 5 章 如何做好数据库之间的数据同步。介绍了数据库同步的各种场景和技术栈。其中有同构数据库的同步,也有异构数据库之间的同步。尤其是OGG的微服务版的实践,包括官方文档中没有全面覆盖(或者疏漏)的知识点。
第 6 章 认识HTAP技术。介绍了HTAP技术架构的原理以及对中小企业的意义,结合国内大多数企业现状,HTAP技术是去除Hadoop技术栈的最佳实践,可以使企业在满足业务的前提下降低成本。
第 7 章 认识数据库的功能原理。介绍了数据库优化器和执行器的一些底层原理。有助于读者了解数据库的运行机制。
第 8 章 认识数据库中的数学(逻辑与算法)。介绍了数据库优化中涉及的一些逻辑和算法的知识。从逻辑和算法上切入,让读者明白优化的核心是逻辑和算法。
第 9 章 DBA的日常:数据库管理及开发的最佳实践。集中介绍了若干笔者在工作中总结积累的数据库管理及应用开发的实践案例,示范性和启发性很强,通过这些案例可以解决读者在数据库开发、运维、构建上的许多问题。
除以上内容之外,本书还有附录1篇:DBA杂谈,分享了包括DBA的职业规划以及笔者总结的SQL开发规范等的六个话题。本书另将部分限于篇幅没有在正文中体现的内容以在线的扩展阅读文档加以呈现,主要内容包括介绍各类型数据库的应用场景、若干提升数据库性能的实践案例。读者可以通过扫描二维码访问笔者的微信公众号阅读这部分内容。
本书的价值创新
笔者认为,本书分享的众多实践案例是最具价值的内容。这些案例具备很强的启发性,例如:从对SQL进行优化、提升数据库性能的案例中可以看出,即使不了解业务,凭借基本的逻辑和算法也可以对数据库进行优化,提升数据库性能。对于数据库设计的案例,可以引导读者认真思考应该怎么做数据库的架构设计,因为良好的架构设计所获收益远大于对SQL本身优化获得的收益。在一些案例中强调了DBA应当认真考虑如何控制需求、引导需求方提出合理的需求,而不是一味执行,因为不合理的需求或者是无意义的需求带来的问题是很多的,技术人员是可以指导业务方开展工作的。对于数据库故障的案例则侧重强调了分析解决问题的思路,如果读者按照本书给出的思路去管理、运维、设计数据库,那么由应用开发层面出现的问题,基本是可以得到控制的。
本书适合的读者人群
本书适合对数据库开发和运维有一定兴趣和基础的读者,包括但不限于以下人群:
-后端基于数据库的Java开发人员。
-使用SQL语言从事数据分析的分析师。
-从事数据库运维的DBA。
-企业研发主管、企业运维主管。
致谢
在完成本书的过程中,我获得了许多支持和帮助。首先要感谢我的家人,他们在整个写作过程中一直给予我勇气、支持和鼓励。在写作期间,我家中发生了很多事情,但家人们仍然全力支持我去完成书稿。没有他们的支持和帮助,我不可能完成这本书。
我还要感谢本书的其他合作者,他们是:王明杰博士,现担任欧冶云商物联网技术首席师,负责撰写本书物联网场景和时序数据库的相关内容;宋希,现担任欧冶云商资深算法工程师,负责撰写本书的动态规划相关内容;李欢,来自字节跳动,作为资深的移动开发者,他撰写了移动端数据库的相关内容。唐政、冯元泊、唐永金三位同事帮助归纳整理了我的案例、文章和想法。感谢张博参与书中的配图制作,还有朱盈易后期帮助笔者解决了一些配图问题。几位合作者贡献良多,也在此表示感谢!
我还要感谢本书的策划编辑王斌,他为我们提供了很多有益的建议,他的专业知识和经验对我们来说是宝贵的。
由于笔者水平有限,书中难免出现错误和不足之处,敬请广大读者批评指正。
薛晓刚
2024年6月24日
|
|