MongoDB教程
第一章 NoSQL和MongoDB简介
## NoSQL 简介 - NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。 #### 常见的数据库类型: - **RDBMS(关系型数据库):**常见的关系型数据库有 Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL; - **NoSQL(非关系型数据库):**常见的非关系型数据库有 MongoDB、Redis、Voldemort、Cassandra、Riak、Couchbase、CouchDB 等。 ####NoSQL 具有以下优点: - **易扩展:**NoSQL 数据库种类繁多,但它们都有一个共同的特点,那就是都去掉了关系型数据库的关系型特性,数据与数据之间没有关系,这样就非常容易扩展,无形之间也在架构的层面上带来了可扩展的能力; - ** 大数据量,高性能:**NoSQL 数据库都具有非常高的读写性能,尤其是在处理庞大数据时表现优秀; - ** 灵活:**NoSQL 随时都可以存储任意类型的数据,无须提前为要存储的数据建立字段; - **高可用:**NoSQL 在不太影响性能的情况下,就可以方便地实现高可用的架构,比如 Cassandra、HBase 模型,通过复制模型也能实现高可用。 #### 适用场景 - 数据模型比较简单; - 对灵活性要求很强的系统; - 对数据库性能要求较高; - 不需要高度的数据一致性; - 对于给定 key,比较容易映射复杂值的环境。 #### CAP定理(CAP theorem) 在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点: - 一致性(Consistency) (所有节点在同一时间具有相同的数据) - 可用性(Availability) (保证每个请求不管成功或者失败都有响应) - 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作) CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性、可用性和分区容错性这三个需求,最多只能同时较好的满足两个。 因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类: - CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。 - CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。 - AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。 ## MongoDB 简介 MongoDB 是由C++语言编写的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档。MongoDB是一个基于分布式文件存储的数据库。 #### MongDB 优势 - 分布式 MongoDB 是开源的分布式数据库,可以解决传统数据库存储容量上的瓶颈问题,用户不必再提前考虑分库分表等操作。同时,MongoDB 也是一个天然高可用的数据库,比如在一主两从的工作模式下,当主节点意外宕机,从节点就会接替主节点的工作,整个过程无须依赖任何第三方组件。 - lschema-free MongoDB 的表结构相对自由,添加字段方便快捷,相比于传统数据库在一张大表里添加字段,运维成本被大大降低。 - 高性能 MongoDB 早期使用 MMAPv1 存储引擎,后来替换为 WiredTiger 存储引擎,它支持行级粒度锁、热点数据缓存等特性,这给 MongoDB 带来了高性能、低延迟、高吞吐等能力。 - 高压缩比 在默认配置下,MongoDB 使用 snappy 压缩算法,可达到平均2到4倍的文本数据压缩能力,如果使用 zlib 压缩算法则可以提升到3至7倍,但是 zlib 对性能有一定影响,因此线上通常使用默认配置即可。经测试,在默认配置的情况下,同样一份数据写入 MongoDB、MySQL、ES 的真实磁盘消耗比约为1 : 3 : 6。 - 完善的客户端访问策略 MongoDB 支持五种均衡访问策略: **primary:**读主节点,当主节点异常时,可能造成短期内的业务异常。 **primaryPreferred:**主节点优先,当主节点异常时可以读从节点。 **secondary:**读从节点,把流量平均衡分配给多个从节点,实现负载均衡。 **secondaryPreferred:**从节点优先,如果从节点异常,则读取主节点。 **nearest:**就近访问,在多机房场景下,就近访问可以避免出现跨机房访问的情况。 #### MongoDB 适用场景 - **网站数据:**Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。 - **缓存:**由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo 搭建的持久化缓存层可以避免下层的数据源过载。 - **高伸缩性的场景:**Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对MapReduce 引擎的内置支持。 - **用于对象及JSON 数据的存储:**Mongo 的BSON 数据格式非常适合文档化格式的存储及查询。 #### MongoDB 不适合于 - **高度事务性的系统:**例如,银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。 - **传统的商业智能应用:**针对特定问题的BI 数据库会产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。 - **需要复杂 SQL 查询的应用。**
顶部
收展
底部
[TOC]
目录
第一章 NoSQL和MongoDB简介
第二章 MongoDB安装
第三章 MongoDB概念
第四章 MongoDB数据类型
第五章 MongoDB连接数据库
第六章 MongoDB数据库增删查
第七章 MongoDB集合增删查
第八章 MongoDB文档增删查改
第九章 MongoDB查询构造器
第十章 MongoDB备份与恢复
第十一章 MongoDB复制(副本集)
第十一章 MongoDB分片
第十一章 MongoDB监控
第十二章 MongoDB索引
相关推荐
MongoDB进阶
PHP操作MongoDB
MongoDB用户及安全
MongoDB优化