MongoDB是一个面向开放源代码文档的数据库,旨在存储大量数据,还使您可以非常高效地使用该数据。由于在MongoDB中数据的存储和检索不是以表格形式进行,因此将其归类为NoSQL(不仅是SQL)数据库。
MongoDB数据库由MongoDB.Inc根据SSPL(服务器端公共许可证)开发和管理,最初于2009年2月发布。它还为所有流行语言(如C,C++,C#和.Net,Go, Java,Node.js,Perl, PHP, Python,Motor,Ruby,Scala,Swift,Mongoid。因此,您可以使用这些语言中的任何一种来创建应用程序。如今,有许多公司使用Facebook,诺基亚,eBay,Adobe,Google等MongoDB来存储大量数据。
这个怎么运作 ?
现在,我们将看到幕后实际发生的事情。众所周知,MongoDB是数据库服务器,数据存储在这些数据库中。换句话说,MongoDB环境为您提供了一台服务器,您可以启动它,然后使用MongoDB在该服务器上创建多个数据库。
由于使用NoSQL数据库,因此数据存储在集合和文档中。因此,数据库,集合和文档相互关联,如下所示:
- MongoDB数据库包含集合,就像MYSQL数据库包含表一样。您可以创建多个数据库和多个集合。
- 现在在集合中,我们有文件。这些文档包含我们要存储在MongoDB数据库中的数据,并且单个集合可以包含多个文档,并且您没有架构,这意味着一个文档不必与另一个文档相似。
- 使用字段创建文档。感觉是文档中的键值对,就像关系数据库中的列一样。字段的值可以是任何BSON数据类型,例如double, 字符串,boolean等。
- MongoDB中存储的数据采用BSON文档的格式。在这里,BSON代表JSON文档的二进制表示。换句话说,在后端,MongoDB服务器将JSON数据转换为称为BSON的二进制形式,并且可以更有效地存储和查询此BSON。
- 在MongoDB文档中,允许您存储嵌套数据。这种数据嵌套使您可以在数据之间创建复杂的关系,并将它们存储在同一文档中,这使得与SQL相比,数据的工作和获取极为高效。在SQL中,您需要编写复杂的联接才能从表1和表2中获取数据。BSON文档的最大大小为16MB。
注意:在MongoDB服务器中,允许您运行多个数据库。
例如,我们有一个名为GeeksforGeeks的数据库。在此数据库中,我们有两个集合,在这些集合中,我们有两个文档。在这些文档中,我们以字段形式存储数据。如下图所示:
mongoDB与RDBMS有何不同?
MongoDB与RDBMS之间的一些主要区别如下:
MongoDB | RDBMS |
---|---|
It is a non-relational and document-oriented database. | It is a relational database. |
It is suitable for hierarchical data storage. | It is not suitable for hierarchical data storage. |
It has a dynamic schema. | It has a predefined schema. |
It centers around the CAP theorem (Consistency, Availability, and Partition tolerance). | It centers around ACID properties (Atomicity, Consistency, Isolation, and Durability). |
In terms of performance, it is much faster than RDBMS. | In terms of performace, it is slower than MongoDB. |
MongoDB的功能–
- 无模式数据库:这是MongoDB提供的强大功能。无模式数据库意味着一个集合可以在其中存储不同类型的文档。换句话说,在MongoDB数据库中,单个集合可以容纳多个文档,并且这些文档可能由不同数量的字段,内容和大小组成。像关系数据库中那样,一个文档不必与另一文档相似。由于这项很酷的功能,MongoDB为数据库提供了极大的灵活性。
- 面向文档:在MongoDB中,所有数据都存储在文档中,而不是像RDBMS中的表一样。在这些文档中,数据存储在字段(键值对)中,而不是存储在行和列中,这使数据与RDBMS相比更加灵活。每个文档都包含其唯一的对象ID。
- 索引:在MongoDB数据库中,使用主索引和辅助索引对文档中的每个字段进行索引,这使操作更加轻松,并且花费更少的时间从数据池中获取或搜索数据。如果未对数据建立索引,则数据库将使用指定的查询来搜索每个文档,这将花费大量时间,而且效率不高。
- 可伸缩性: MongoDB在分片的帮助下提供了水平可伸缩性。分片是指在多个服务器上分发数据,此处使用分片密钥将大量数据划分为多个数据块,并且这些数据块均匀分布在驻留在许多物理服务器上的各个分片之间。它还会将新计算机添加到正在运行的数据库中。
- 复制: MongoDB在复制的帮助下提供了高可用性和冗余,它创建数据的多个副本并将这些副本发送到另一台服务器,这样一台服务器发生故障时,就会从另一台服务器检索数据。
- 聚合:它允许对分组的数据执行操作并获得单个结果或计算结果。它类似于SQL GROUPBY子句。它提供了三种不同的聚合,即聚合管道,map-reduce函数和单一用途的聚合方法
- 高性能:由于其可伸缩性,索引,复制等功能,与另一个数据库相比,MongoDB的性能非常高,并且数据持久性高。
MongoDB的优点:
- 它是无模式的NoSQL数据库。使用MongoDB时,您无需设计数据库的架构。
- 它不支持联接操作。
- 它为文档中的字段提供了极大的灵活性。
- 它包含异构数据。
- 它提供了高性能,可用性,可伸缩性。
- 它有效地支持地理空间。
- 这是一个面向文档的数据库,数据存储在BSON文档中。
- 它还支持多个文档ACID转换(MongoDB 4.0中的字符串)。
- 它不需要任何SQL注入。
- 它很容易与大数据Hadoop集成
MongoDB的缺点:
- 它使用高内存进行数据存储。
- 您在文档中存储的数据不得超过16MB。
- BSON中的数据嵌套也受到限制,您不能嵌套超过100个级别的数据。