工欲善其事,必先利其器,在学习 MongoDB 的用法之前,我们先来学习一下 MongoDB 的概念。
MongoDB 是一个基于分布式文件存储的数据库,它由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似于 json 的 bson 格式,因此可以存储比较复杂的数据类型。Mongo 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
上面我们说过了,MongoDB 是非关系型数据库,也就是我们常说的 NoSQL,那它与关系型数据库(例如 MySQL)有什么不同呢?
我们可以来看下这张表,关系型数据库的表在 MongoDB 被称为集合,行被称为文档,其他的大体上一致。另外,MongoDB 的数据存储格式为基于 JSON 格式的 BSON,这点与传统的关系型数据库存在差异。
MongoDB 高性能、易部署、易使用,存储数据非常方便。
高性能,MongoDB 提供高性能的数据持久性高可用性,MongoDB 的复制工具称为副本集,它可提供自动故障转移和数据冗余高扩展性MongoDB 是面向文档存储的,操作比较简单可以在 MongoDB 中设置索引提供了分片功能,即随着负载的增加,可以分布在计算机网络中的其他节点上使用高效的二进制数据存储,包括大型对象支持丰富的查询表达式。查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组MongoDB 会自动将 _id 字段设置为主键MongoDB 不支持表连接模式自由,对于存储在 MongoDB 中的文件,不需要知道它的任何结构定义,甚至我们可以把不同结构的文件存储在同一个数据库里部分支持 SQL 语句ObjectId 类似唯一主键,可用于生成和排序,速度较快,长度为12 bytes。
前 4 个字节表示创建 unix 时间戳接下来 3 个字节是机器标识码接下来 2 个字节是进程 id 组成 PID最后三个字节是随机数MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是 ObjectId 对象。
可能有人会问,现在我们用 MySQL 不是挺好的嘛,干嘛要花费这么多时间来学习一样新的技能?但事实上,传统关系型数据库(MySQL)对于当前的互联网需求,似乎有些力不从心了:
对数据库高并发读写的需求对海量数据的高效率存储和访问的需求对数据库的高可扩展性和高可用性的需求对于这几个需求,MySQL 很难解决,但是术业有专攻,MySQL 不行,它的堂兄却是可以完美解决这些问题。那它的堂兄是谁呢?相信大家已经猜到了,它就是我们今天的主角 MongoDB 了,那 MongoDB 有哪些适用场景呢?
网站实时数据处理。MongoDB 非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性由于其高性能,可以作为缓存高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库数据量为亿万级,或者需要不断扩容读写频繁的场景,需要每秒读写达到 2000 - 3000需求易变,数据模型无法确定,想快速迭代开发处理价值较低的数据,对事务性要求不高应用发展迅速,需要能快速水平扩展应用要求存储的数据不丢失应用需要 99.999% 高可用应用需要大量的地理位置查询、文本查询参考:MongoDB 教程 MongoDB 入门篇