MongoDB是什么
MongoDB是一个基于分布式文件存储的数据库,由C++编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json和bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 ——《百度百科》
与关系型数据库的差异
从数据结构上来说,存在着如表所示的差异。
| MongoDB | 关系型数据库 |
|---|---|
| 数据库(Database) | 数据库(Database) |
| 集合(Collection) | 表(table) |
| 文档(Documents) | 行(Row) |
| 列 (Column) | 字段(Field) |
| 索引(Index) | 索引(Index) |
| 主键(自动生成_id作为主键) | 主键(Primary key) |
举个例子,SQL中有数据如下表:
| id | userName | age | city | |
|---|---|---|---|---|
| 1 | yellowbird | 555@qq.com | 25 | shenzhen |
在MongoDB中对应的文档就应该是:
[{ "_id": ObjectId("611a16ec2f5cdee36011d53e"), "userName": "yellwobird", "email": "555@qq.com", "age": 25, "city": "shenzhen"}]
对于前端人员来说,MongoDB的文档模型最接近于我们日常开发的对象模型,从理解上更加简单易懂。相较于关系型数据库,MongoDB具有更高的读写性能,由于文档模型把相关数据集中在一块,在普通机械盘上读数据到时候不用花太多的时间去定位磁头,因此在IO性能上具有得天独厚的优势。由于MongoDB对于文档的数据结构以及格式没有严格的限制,所以更容易支持异构数据的场景,可拓展性强,因此,我们可以任意的在文档中新增或者删除字段,也不会对数据库的稳定性产生影响,但也正因为如此,MongoDB的管理会比关系型数据库更加难以管理。
作为文档型的数据库,其关系能力薄弱,不能像MySQL一样使用join,union来进行联合查找,只能通过结合一些特殊语法来达到类似的结果。
综上,如果项目中使用事务和关联查询较少,或是数据相对比较不敏感的情况都可以使用MongoDB。