阿丹:
不断拓展自己的技术栈,不断学习新技术。
基本概念
MongoDB中文手册|官方文档中文版 - MongoDB-CN-Manual
mongdb是文档数据库
MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组。
文档数据库
文档数据库是一种数据库模型,它专门用于存储和管理非结构化数据,例如文档、文本和半结构化数据。相比传统的关系型数据库,文档数据库通过将数据组织为灵活的文档集合来提供更高的灵活性和扩展性。
在文档数据库中,数据以类似于JSON或BSON的文档格式存储,每个文档可以具有不同的结构和字段。这使得文档数据库适用于处理动态数据、半结构化数据或需要频繁变更模式的应用程序。
另一个重要的概念是文档数据库的查询能力。文档数据库提供了强大且灵活的查询功能,允许开发人员按需检索和操作存储的文档数据。这些查询可以使用结构化查询语言,如MongoDB的查询语言,或通过API进行编程。
总的来说,文档数据库提供了一种高度灵活的存储和查询解决方案,适合那些需要存储非结构化数据并保持灵活性的应用程序。
使用文档优点:
-
文档(即对象)对应于许多编程语言中的内置数据类型。
-
嵌入式文档和数组减少了对昂贵连接的需求。
-
动态模式支持流畅的多态性。
JSON(JavaScript Object Notation)和BSON(Binary JSON)都是用于表示结构化数据的格式,常用于文档数据库中的文档存储。
JSON是一种轻量级的数据交换格式,易于理解和使用。它使用人类可读的文本格式,采用键值对的形式来表示数据。JSON文档由嵌套的键值对组成,可以包含字符串、数字、布尔值、数组、嵌套的对象等数据类型。JSON格式非常适合简单的数据结构和基本的数据交换。
BSON是JSON的二进制表示形式,旨在提供更高的效率和更紧凑的存储方式。BSON使用二进制编码,以二进制形式表示JSON文档的键值对。与JSON相比,BSON格式存储更加紧凑,减少了存储空间和数据传输的需求,同时提供了更高的读写性能。
BSON支持的数据类型包括字符串、整数、浮点数、日期时间、布尔值、数组、嵌套的文档对象等。它还可以表示特殊类型,如正则表达式、JavaScript代码和二进制数据。BSON还提供了对数据类型的扩展,以支持更复杂的数据结构和功能,例如时间戳、最小、最大值等。
由于BSON的二进制表示形式,它在存储和传输数据时更加高效,并且能够更好地适应文档数据库的要求。因此,BSON是许多文档数据库(如MongoDB)中常用的文档存储格式。
下面是一个bson格式的示例
\x16\x00\x00\x00 // 整个文档的大小
\x02 // 数据类型为字符串
name\x00 // 字段名
\x0C\x00\x00\x00John\x00 // 字段值为字符串 "John"
\x10 // 数据类型为整数
age\x00 // 字段名
\x1E\x00\x00\x00 // 字段值为整数 30
\x00 // 数据类型为结束符
集合/视图/按需实例化视图
MongoDB将文档存储在集合中。集合类似于关系数据库中的表。
除集合外,MongoDB还支持:
-
只读视图(从MongoDB 3.4开始)
-
按需实例化视图(从MongoDB 4.2开始)。
mongdb中的集合
数据库和集合 - MongoDB-CN-Manual
在MongoDB中,集合是文档的组,类似于关系数据库中的表。集合存在于数据库中,集合没有固定的结构,这意味着集合内的文档可以有不同的字段。
集合有以下主要特点:
- 集合存在于数据库中,一个数据库可以有多个集合。
- 集合类似于关系数据库中的表,但集合没有固定的结构。不同的文档可以有不同的字段。
- 集合中的每个文档都有一个主键_id来唯一标识。
- 集合可以通过名称来标识,当首次存储文档时会自动创建集合。
- 一个集合可以存储任意多个文档。
- 集合不会强制执行模式(schema),所以同一个集合中的文档可以有不同的字段。
- 集合会继承数据库的权限管理。
mongdb中的只读视图
Views — MongoDB Manual
只读视图的使用业务场景
- 数据隔离:在某些情况下,我们需要将不同的用户或应用程序隔离开来,让他们只能访问自己需要的数据,而不能修改或删除其他人的数据。只读视图可以帮助我们实现数据隔离,保护数据的安全性和完整性。
- 数据审计:只读视图可以用于数据审计,即对数据进行审查和验证。通过只读视图,我们可以方便地查看数据,而不能修改或删除数据,确保数据的完整性和准确性。
- 数据共享:只读视图也可以用于数据共享,让不同的用户或应用程序共享数据,但不允许他们修改或删除数据。这样,我们可以确保数据的安全性和完整性,同时让更多的人能够方便地使用数据。
mongdb中的按需实例化视图
又称按需式物化视图,是MongoDB4.2最强大的新增功能之一
按需实例化视图是在MongoDB中一种特殊的只读集合,它会根据用户的查询需求,动态地实例化视图。与传统的只读视图不同,按需实例化视图不会提前创建视图,而是在每次查询时实时创建,并根据查询条件过滤数据。
按需实例化视图可以有效地减少存储空间和计算资源的使用,因为只有在需要查询数据时才会创建视图,并过滤出符合条件的数据。此外,按需实例化视图还可以提高查询性能,因为它们不会受到固定视图所带来的限制,可以更灵活地过滤数据。
在MongoDB中,按需实例化视图可以通过使用$merge
阶段来创建。$merge
阶段可以将管道结果的集合合并到现有集合中,而不是完全替换集合。这个特性使得按需实例化视图成为可能。通过在管道中添加$merge
阶段,我们可以将聚合结果写入到现有集合中,并在需要时动态地实例化视图。
按需实例化视图在某些情况下非常有用,例如当我们需要动态地过滤数据,并根据查询条件实时生成视图时。通过使用按需实例化视图,我们可以更加灵活地处理数据,并确保数据的安全性和完整性。
水平拓展
MongoDB提供水平可伸缩性作为其_核心_ 功能的一部分:
-
分片将数据分布在一个集群的机器上。
-
从3.4开始,MongoDB支持基于分片键创建数据区域。在平衡群集中,MongoDB仅将区域覆盖的读写定向到区域内的那些分片。有关 更多信息,请参见区域章节。
支持多种存储引擎
MongoDB支持多个存储引擎:
-
WiredTiger存储引擎(包括对静态加密的支持 )
-
内存存储引擎。
另外,MongoDB提供可插拔的存储引擎API,允许第三方为MongoDB开发存储引擎。
← MongoDB手册内容
原文链接:Introduction to MongoDB — MongoDB Manual
使用场景
MongoDB是一种文档型数据库,具有高性能、高伸缩性和易用性等特点,适用于多种场景。以下是一些MongoDB的使用场景:
- 实时数据分析:MongoDB可以快速处理大量数据,并提供实时数据分析功能,适用于网络分析、业务智能、市场分析等场景。
- 游戏开发:MongoDB适合存储游戏用户信息、装备、积分等数据,并提供强大的查询和更新功能,提高游戏开发效率。
- 物流管理:MongoDB可以存储订单信息、订单状态、物流信息等数据,并提供灵活的查询和更新功能,帮助物流企业提高管理效率。
- 社交网络:MongoDB适合存储用户信息、朋友圈信息、地理位置信息等数据,并提供了强大的查询和数据分析功能,适用于社交网络应用。
- 物联网:MongoDB可以存储智能设备信息、设备汇报的日志信息等数据,并提供了实时查询和分析功能,适用于物联网应用。
- 视频直播:MongoDB可以存储用户信息、礼物信息等数据,并提供了高伸缩性和实时查询功能,适用于视频直播应用。
总之,MongoDB适用于需要处理大量数据、需要高伸缩性和实时查询的场景,可以提供高效的数据存储、查询和分析功能,帮助企业提高业务效率和竞争力。
mongdb的使用原因
MongoDB之所以被广泛使用,是因为它具有以下优点:
- 文档型数据库结构:MongoDB采用文档型数据库结构,可以存储各种类型的数据,如文本、数字、日期、二进制数据等,而且数据存储不需要固定的结构,可以灵活地插入和更新数据。
- 高性能:MongoDB使用了内存映射文件的方式,将数据存储在内存中,提高了读写速度和性能。
- 高扩展性:MongoDB支持分片集群,可以将数据分布在多个节点上,提高系统的扩展性和可靠性。
- 查询语言丰富:MongoDB支持丰富的查询语言,可以轻松地查询和过滤数据。
- 易于使用:MongoDB提供了丰富的的主流客户端库和语言驱动程序,可以方便地与各种应用程序进行集成。
- 社区支持:MongoDB拥有一个活跃的社区,提供了大量的的问题解决方案和工具,使得开发人员可以更加轻松地解决技术问题。
综上所述,MongoDB具有文档型数据库结构、高性能、高扩展性、查询语言丰富、易于使用和社区支持等优点,使得它成为一种广泛使用的数据库。
mongdb的同类产品对比
MongoDB与其他数据库产品相比,具有以下特点:
- 文档型数据库结构:MongoDB采用文档型数据库结构,可以存储各种类型的数据,如文本、数字、日期、二进制数据等,而且数据存储不需要固定的结构,可以灵活地插入和更新数据。
- 高性能:MongoDB使用了内存映射文件的方式,将数据存储在内存中,提高了读写速度和性能。
- 高扩展性:MongoDB支持分片集群,可以将数据分布在多个节点上,提高系统的扩展性和可靠性。
- 查询语言丰富:MongoDB支持丰富的查询语言,可以轻松地查询和过滤数据。
- 易于使用:MongoDB提供了丰富的主流客户端库和语言驱动程序,可以方便地与各种应用程序进行集成。
相比其他数据库产品,MongoDB在文档型数据库结构、高性能、高扩展性、查询语言丰富、易于使用等方面具有优势。但是,每个数据库产品都有其适用的场景和优势,需要根据具体的应用需求来选择最合适的数据库产品。
Cassandra,CouchDB,Redis,Riak,Hbase同类型产品
Cassandra、CouchDB、Redis、Riak和HBase都是流行的数据库产品,每个产品都有其自己的特点和优缺点。
以下是对这些产品与MongoDB的对比和优缺点的简要概述:
- Cassandra: Cassandra是高度可扩展的,能够处理大规模数据,并提供了强大的写入和读取性能。它的分布式特性使其能够轻松地跨多个节点进行数据复制和故障恢复。但是,Cassandra的使用相对复杂,需要一定的技术水平。
- CouchDB: CouchDB是一个高度可扩展的数据库,具有良好的容错性和可靠性。它使用文档存储数据,并支持全文搜索和附件处理。CouchDB的使用相对简单,但是它的性能相对较差,可能不适合高负载应用。
- Redis: Redis是一个内存数据库,具有非常高的读写性能和快速的数据访问速度。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合。但是,Redis的存储容量受到内存限制,不适合存储大量数据。
- Riak: Riak是一个高度可扩展的分布式数据库,能够处理大规模数据。它具有良好的容错性和可靠性,并支持多种数据类型和查询语言。Riak的使用相对简单,但是它的性能相对较差,可能不适合高负载应用。
- HBase: HBase是一个分布式键值存储数据库,具有高性能和可扩展性。它能够处理大量数据,并支持多种数据类型和查询语言。但是,HBase的使用相对复杂,需要一定的技术水平。
相比之下,MongoDB具有文档型数据库结构、高性能、高扩展性、查询语言丰富、易于使用等优点。但是,每个数据库产品都有其适用的场景和优势,需要根据具体的应用需求来选择最合适的数据库产品。