知识点
软件工具
相关文章
更多最近更新
更多快速了解MongoDB【基本概念与体系结构】
2020-10-04 10:34|来源: 网络
什么是MongoDB
MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era.
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
MongoDB特点
Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
1、面向集合存储,易存储对象类型的数据。
2、模式自由。
3、支持动态查询。
4、支持完全索引,包含内部对象。
5、支持查询。
6、支持复制和故障恢复。
7、使用高效的二进制数据存储,包括大型对象(如视频等)。
8、自动处理碎片,以支持云计算层次的扩展性。
9、支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
10、文件存储格式为BSON(一种JSON的扩展)。
MongoDB体系结构
MongoDB 的逻辑结构是一种层次结构。主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。逻辑结构是面向用户的,用户使用 MongoDB 开发应用程序使用的就是逻辑结构。
1、MongoDB 的文档(document),相当于关系数据库中的一行记录。
2、多个文档组成一个集合(collection),相当于关系数据库的表。
3、多个集合(collection),逻辑上组织在一起,就是数据库(database)。
4、一个 MongoDB 实例支持多个数据库(database)。
文档(document)、集合(collection)、数据库(database)的层次结构如下图:
MongoDb | 关系型数据库Mysql |
---|---|
数据库(databases) | 数据库(databases) |
集合(collections) | 表(table) |
文档(document) | 行(row) |
文档 document
文档是MongoDB中数据的基本单元(类似于关系型数据库中的行,但是比行要复杂得多)。多个键及其关联的值有序地放置在一起便是文档。MongoDB的文件存储格式为BSON。
BSON是Binary JSON 的简称,是一个JSON文档对象的二进制编码格式。BSON同JSON一样支持往其它文档对象和数组中再插入文档对象和数组,同时扩展了JSON的数据类型。如:BSON有Date类型和BinDate类型。
BSON有三个特点:轻量性、可遍历性、高效性
文档就可以这样表示:{ "firstName": "egger", "lastName":"wong" }
文档的特征:
1、文档中的键/值对是有序的。
2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌人的文档)。
3、MongoDB区分类型和大小写。
4、MongoDB的文档不能有重复的键。
5、文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
6、键不能含有\0 (空字符)。这个字符用来表示键的结尾。
7、.和$有特别的意义,只有在特定环境下才能使用。
8、以下划线"_"开头的键是保留的(不是严格要求的)。
集合
集合就是一组文档(类似于关系型数据库中的表),可以被看做是没有模式的表。
集合是无模式的。这意味着一个集合里面的文档可以是各式各样的。例如,下面两个文档可以存在于同一个集合里面:
{"name": "egger"}
{"age":18}
上面的文档不光是值的类型不同(字符串和整数),它们的键也是完全不一样的。
虽然集合里面可以放置任何文档,但是推荐使用多个集合:
把各种各样的文档都混在一个集合里面,无论对于开发者还是管理员来说都是噩梦。
在一个集合里面査询特定类型的文档在速度上也很不划算,分开做多个集合要快得多。
把同种类型的文档放在一个集合里,这样数据会更加集中。
当创建索引的时候,文档会有附加的结构(尤其是有唯一索引的时候)。索引是按照集合来定义的。把同种类型的文档放入同一个集合里面,可以使索引更加有效。
命名
我们可以通过名字来标识集合。集合名可以是满足下列条件的任意UTF-8字符串。
1、集合名不能是空字符串""。
2、集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
3、集合名不能以"system."开头,这是为系统集合保留的前缀。
4、用户创建的集合名字不能含有保留字符$。有些驱动程序的确支持在集合名里面包含$,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。
子集合
组织集合的一种惯例是使用"."字符分开的按命名空间划分的子集合。在MongoDB中使用子集合来组织数据是很好的方法
例如,一个个人信息可能包含两个集合,分别是person.name和person.age。这样做的目的只是为了使组织结构更好些,也就是说person这个集合(这里根本就不需要存在)及其子集合没有任何关系。把数据库的名字放到集合名前面,得到就是集合的完全限定名,称为命名空间。命名空间的长度不得超过121字节,在实际使用当中应该小于100字节。
很多MongoDB工具中都包含子集合。
GridFS是一种存储大文件的协议,使用子集合来存储文件的元数据,这样就与内容块分开了
MongoDB的Web控制台通过子集合的方式将数据组织在DBTOP部分.
绝大多数驱动程序都提供语法糖,为访问指定集合的子集合提供方便。
数据库
MongoDB中多个集合可以组成数据库。MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。
1、不能是空字符串("")。
2、不得含有' '(空格)、.、$、/、\和\0 (空宇符)。
3、应全部小写。
4、最多64字节。
5、有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
• admin
从权限的角度来看,这是“root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
• local
这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
• config
当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
本文整理于网络
相关问答
更多-
电脑体系结构?[2022-10-20]
-
电脑的体系结构.电脑组成和电脑实现概念和三者关系[2022-01-31]
-
如何理解电脑组成和电脑体系结构?[2022-09-17]
-
电脑网络体系结构[2022-04-16]
....就是这样 -
1,什么是电脑体系结构?什么是电脑组成[2023-11-14]
计算机体系结构(ComputerArchitecture)是程序员所看到的计算机的属性,即概念性结构与功能特性。按照计算机系统的多级层次结构,不同级程序员所看到的计算机具有不同的属性。 计算机组成(computer composition)指的是系统结构的逻辑实现,包括机器机内的数据流和控制流的组成及逻辑设计等。 -
简述SOA软件体系结构的基本概念,简述Web Service的主要协议[2022-11-07]
Web服务(Web Services)在很多人眼里还是个十分神秘的概念,究其根源,我想主要是由于Web服务被宣传得很多,但实际应用却鲜见,给人一种很复杂和难以理解的感觉。另外,Web服务是基于XML的,不少人对XML本身也缺乏理解,虽然他们可能每天都在写XML格式的配置文件。 提到Web服务的起源就一定要先说一说SOA(面向服务的体系结构),和很多具有划时代意义的软件技术一样,SOA的出现根本上也是为了解决软件危机问题。做过项目的人都有过这种感受,随着项目推进,模块之间关系越来越紧密,任何一个小的修改都可能 ... -
NodeJS和Python同样适用于基本的图像处理。 在这方面,我会更加关注您的团队的专业知识和/或当前环境,从而确定服务器端语言。 使用Python PIL或Pillow是要使用的主要图像库。 我已经使用https://github.com/aheckmann/gm来进行基本图像处理并不困难的NodeJS。 (和4)在从API中检索图像方面,我典型地使用典型的REST / CRUD来设置元数据,并通过添加... /图像将图像放到更深的一层。 到端点。 例如: GET ../picture/
将返回 ... -
您最好的选择是将您的群组和评论模式嵌入您的文章文档中。 例如, var GroupSchema = Schema({ name: String, created: { type:Date, default: Date.now }, }); var CommentSchema = Schema({ text: String, postedBy: { type: mongoose.Schema.Types.ObjectId, ref: 'Use ...