新書推薦:
《
超加工人群:为什么有些食物让人一吃就停不下来
》
售價:NT$
454.0
《
历史的教训(浓缩《文明的故事》精华,总结历史教训的独特见解)
》
售價:NT$
286.0
《
不在场证明谜案(超绝CP陷入冤案!日本文坛超新星推理作家——辻堂梦代表作首次引进!)
》
售價:NT$
265.0
《
明式家具三十年经眼录
》
售價:NT$
2387.0
《
敦煌写本文献学(增订本)
》
售價:NT$
1010.0
《
耕读史
》
售價:NT$
500.0
《
地理计算与R语言
》
售價:NT$
551.0
《
沈括的知识世界:一种闻见主义的实践(中华学术译丛)
》
售價:NT$
398.0
|
內容簡介: |
本书分为以下几个主要部分:第 1-3 章介绍方法和技术。在这些章节中,我们描述了一种性能调优方法。还提供了一些关于 MongoDB 架构和 MongoDB 提供的用于调查、监控和诊断 MongoDB 性能的工具的背景知识。第 4 章和第 5 章介绍应用程序和数据库设计。第 6-10 章介绍应用程序代码的优化。第 11-14 章讨论MongoDB 服务器及其运行硬件的优化。
|
目錄:
|
译者序前言致谢审校者简介第一部分 方法和工具第1章性能调优方法 21.1 警示故事 21.2 对症性能调优 31.3 系统性能调优 31.3.1 数据库请求剖析 31.3.2 MongoDB数据库的层次 41.4 小化应用程序工作负载 51.5 减少物理IO 61.6 优化磁盘IO 61.7 集群调优 71.8 小结 7第2章MongoDB架构与概念 82.1 MongoDB文档模型 82.1.1 JSON 92.1.2 二进制JSON 92.1.3 集合 92.1.4 MongoDB schema 92.2 MongoDB协议 122.2.1 有线协议 122.2.2 MongoDB驱动程序 122.3 MongoDB命令 132.3.1 查找命令 132.3.2 聚合命令 142.3.3 数据操作命令 152.4 一致性机制 152.4.1 读取策略与写入策略 152.4.2 事务 162.5 查询优化 162.6 MongoDB架构 172.6.1 mongod 172.6.2 存储引擎 172.6.3 副本集 182.6.4 分片 192.6.5 分片机制 192.6.6 集群平衡 202.7 小结 20第3章行业工具 213.1 explain() 213.1.1 开始使用explain() 223.1.2 替代计划 243.1.3 执行统计信息 253.1.4 使用explain()来调优查询 263.1.5 可视化解释函数的使用方法 283.2 查询剖析器 293.2.1 system.prof?ile集合 303.2.2 分析剖析数据 313.3 使用MongoDB日志进行调优 333.4 服务器统计信息 353.5 检查当前操作 383.6 操作系统监控 413.7 MongoDB Compass 423.8 小结 43第二部分 应用程序与数据库设计第4章schema建模 464.1 指导原则 464.2 链接与嵌入 474.2.1 案例研究 474.2.2 获取客户的所有数据 504.2.3 获取所有未结订单 514.2.4 热门产品 524.2.5 插入新订单 534.2.6 更新产品 544.2.7 删除客户 544.2.8 案例研究总结 554.3 高级模式 564.3.1 子集化 564.3.2 垂直分区 584.3.3 属性模式 584.4 小结 60第5章索引 615.1 B树索引 615.1.1 索引选择性 625.1.2 唯一索引 635.1.3 索引扫描 635.1.4 不区分大小写的搜索 645.2 复合索引 655.2.1 复合索引性能 665.2.2 复合索引键顺序 665.2.3 复合索引指南 675.2.4 覆盖索引 675.3 索引合并 685.4 局部索引和稀疏索引 685.4.1 局部索引 695.4.2 稀疏索引 695.5 使用索引进行排序和连接 705.5.1 排序 705.5.2 连接 705.6 索引开销 705.7 文本索引 735.8 地理空间索引 785.8.1 地理空间索引性能 815.8.2 地理空间索引限制 815.9 小结 82第三部分 MongoDB代码调优第6章查询调优 846.1 缓存结果 846.2 优化网络往返 866.2.1 投影 866.2.2 批处理 876.2.3 在代码中避免过多的 网络往返 886.2.4 批量插入 906.2.5 应用程序架构 906.3 选择索引与选择扫描 906.4 优化排序操作 936.5 选择或创建正确的索引 956.6 过滤策略 976.6.1 不等条件 976.6.2 范围查询 996.6.3 $OR或$IN操作 1006.6.4 数组查询 1016.6.5 正则表达式 1026.6.6 $exists查询 1036.7 优化集合扫描 1056.8 小结 105第7章调优和利用聚合管道 1067.1 调优聚合管道 1067.1.1 优化聚合排序 1097.1.2 自动管道优化 1117.2 优化多集合连接 1137.2.1 连接顺序 1157.2.2 优化图查找 1167.3 聚合内存利用 1187.4 在聚合管道中排序 1197.4.1 索引聚合排序 1197.4.2 磁盘排序 1217.5 优化视图 1227.6 小结 126第8章插入、更新和删除 1278.1 基础知识 1278.1.1 过滤器优化 1278.1.2 解释数据操作语句 1288.1.3 索引开销 1288.1.4 找到未使用的索引 1298.1.5 写入策略 1308.2 插入 1308.2.1 批处理 1308.2.2 克隆数据 1328.2.3 从文件加载 1348.3 更新 1348.3.1 动态值批量更新 1348.3.2 multi:true标志 1358.3.3 upsert 1368.3.4 使用$merge的批量upsert 1378.4 删除 1388.5 小结 138第9章事务 1399.1 事务理论 1399.2 MongoDB事务 1409.2.1 事务限制 1419.2.2 TransientTransactionError 1419.2.3 MongoDB驱动程序中的事务 1439.2.4TransientTransactionError对性能的影响 1459.3 事务优化 1469.3.1 避免事务 1469.3.2 操作顺序 1489.3.3 对热文档分区 1499.4 小结 150第10章服务器监控 15210.1 主机级监控 15210.1.1 网络 15310.1.2 CPU 15510.1.3 内存 15610.1.4 磁盘IO 15610.2 MongoDB服务器监控 15610.2.1 Compass 15610.2.2 Free Monitoring服务 15710.2.3 Ops Manager 15810.2.4 MongoDB Atlas 15810.2.5 第三方监控工具 16010.3 小结 160第四部分 服务器调优第11章内存调优 16211.1 MongoDB内存架构 16211.1.1 主机内
|
內容試閱:
|
当MongoDB于2009年出现时,数据库技术正处于十字路口。20多年来,Oracle、SQL Server和MySQL等关系数据库一直主导着数据库市场。这些数据库与关系数据模型、SQL语言和“ACID”事务,一起成为改变现代商业应用程序的基础,推动了互联网革命。但到了2005年左右,关系数据库显然无法满足Web应用程序的永远在线、全球可扩展的新型需求。这些“Web 2.0”应用程序需要新的数据库管理系统。
到2010年,出现了大量非关系型“NoSQL”系统—Hadoop、HBase、Cassandra等。在这些非关系型“新贵”中,MongoDB几乎是最成功的。在撰写本文时,MongoDB是排名前五的数据库管理系统之一。在前五名中,只有MongoDB基于21世纪的技术,其他4个(Oracle、MySQL、SQL Server和Postgres)都起源于20世纪80年代和90年代。
MongoDB的成功可以归因于许多因素,例如,遵循面向对象的编程范式以及与现代DevOps实践的兼容性。总的来说,MongoDB之所以蓬勃发展,是因为它让开发人员更轻松。然而,在过去几年中,我们已经看到MongoDB从“由开发人员为开发人员服务”的数据库升级为支持新一代关键任务系统的平台,适用于越来越广泛的企业。
随着MongoDB的成熟以及在企业应用上的扩展,性能管理变得越来越重要。众所周知,性能不佳的客户应用程序对于当今的在线企业来说可能是致命的。例如,当网页的加载时间从1s增加到5s时,用户放弃浏览该页面的概率会增加90%,这会直接影响在线收入。由于数据库执行大量的磁盘IO操作和数据处理,因此数据库通常是导致性能不佳的根本原因。
此外,在云中,性能管理就是成本管理:性能不佳的数据库会消耗不必要的CPU、内存和IO资源,而这些资源需要支付费用。花几天时间调优基于MongoDB的大型云应用程序可能会节省数十万美元的托管费用。
事实上,我们甚至可以说性能管理是出于对环境的考虑。为繁忙的数据库服务器供电不仅耗费金钱,还会产生温室气体。减少家庭能源消耗是一项社会责任,降低数据中心的能耗也同样重要。调优不当的MongoDB数据库就像调优不当的汽车,会适得其反:它可以让你从A到B,但会花费更多的汽油,并对环境造成更严重的损害。
我们试图制作一本连贯而全面的MongoDB调优手册,本书就是一次尝试。为此,我们制定了以下目标:
为MongoDB性能调优提供一种方法论,系统而有效地解决性能问题。特别是,这种方法论试图先于症状来定位原因。
解决MongoDB性能管理各方面的问题,从数据库设计到应用程序代码的调整,再到服务器和集群优化。
高度关注调优相关的基本技能。基本技能是显著提升性能不可或缺的能力,如果不能很好地掌握,则通常会限制由应用先进技术而获得的好处。
本书结构
本书分为以下几个主要部分:
第1~3章介绍方法和工具。在这几章中,我们描述了一种性能调优方法论,它为调优MongoDB数据库提供了最有效的手段。我们还提供了一些关于MongoDB架构和工具的背景知识,这些工具是MongoDB提供的,用于调查、监控和诊断MongoDB的性能。
第4章和第5章介绍应用程序和数据库设计。在这里,我们介绍了开发高效文档模型和为MongoDB集合建立索引的基础知识。
第6~10章介绍应用程序代码的优化。调整应用程序代码通常可以显著提升数据库性能,并且这应该在调整服务器或集群配置之前解决。我们将研究如何优化MongoDB的f?ind()语句、聚合管道和数据操作语句。
第11~14章讨论MongoDB服务器及其运行硬件的优化。我们将解释如何优化内存以避免IO、如何优化无法阻止的IO,以及如何配置高效的MongoDB集群。
读者对象
本书适用于对提高MongoDB数据库性能或提高依赖该数据库的应用程序的性能感兴趣的人,包括应用程序架构师、开发人员和数据库管理员。
尽管本书提出了一种连贯且符合逻辑的数据库调优方法,但并非本书的所有部分都对所有读者有同样的吸引力。例如,开发人员可能会发现应用程序代码部分比IO优化部分对他更有帮助。同样,无法访问应用程序代码的数据库管理员可能会发现服务器优化部分更有用。
每个读者都可以选择跳过自己不感兴趣的内容。然而,我们要强调的是,本书主张的是在缓解症状之前定位性能问题的根本原因。在使用后面章节(例如第12章)中的方法时,我们假设你已经执行了前面章节(例如第5章)中概述的处理方法。
我们希望这本书适合那些对MongoDB数据库比较陌生的人阅读,所以也简要地解释了关键概念和MongoDB架构。但前提是你对MongoDB和JavaScript编程语言有一定的了解。
脚本和示例数据
本书使用各种脚本来报告MongoDB的性能。所有这些脚本都可以在GitHub上找到,网址为https://github.com/gharriso/MongoDBPerformanceTuningBook。
主脚本mongoTuning.js提供从MongoDB shell会话中访问所有这些脚本的权限。要在MongoDB shell中使用这些脚本,只需以脚本名称为参数发出Mongo命令并添加--shell选项即可,例如:
这些示例也可以在GitHub存储库中的examples文件夹下找到。这些示例使用的数据以压缩转储文件的形式存储在sampleData文件夹中。有关如何加载数据的说明详见同一文
件夹。
|
|