时间:2021-07-01 10:21:17 帮助过:14人阅读
1、易用性
MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库。
不采用关系型主要是为了获得更好得扩展性。当然还有一些其他好处,与关系数据库相比,面向文档的数据库不再有“行“(row)的概念取而代之的是更为灵活的“文档”(document)模型。
通过在文档中嵌入文档和数组,面向文档的方法能够仅使用一条记录来表现复杂的层级关系,这与现代的面向对象语言的开发者对数据的看法一致。
另外,不再有预定义模式(predefined schema):文档的键(key)和值(value)不再是固定的类型和大小。由于没有固定的模式,根据需要添加或删除字段变得更容易了。
通常由于开发者能够进行快速迭代,所以开发进程得以加快。而且,实验更容易进行。开发者能尝试大量的数据模型,
从中选一个最好的。
2、易扩展性
应用程序数据集的大小正在以不可思议的速度增长。随着可用带宽的增长和存储器价格的下降,即使是一个小规模的应用程序,需要存储的数据量也可能大的惊人,甚至超出
了很多数据库的处理能力。过去非常罕见的T级数据,现在已经是司空见惯了。
由于需要存储的数据量不断增长,开发者面临一个问题:应该如何扩展数据库,分为纵向扩展和横向扩展,纵向扩展是最省力的做法,但缺点是大型机一般都非常贵,而且
当数据量达到机器的物理极限时,花再多的钱也买不到更强的机器了,此时选择横向扩展更为合适,但横向扩展带来的另外一个问题就是需要管理的机器太多。
MongoDB的设计采用横向扩展。面向文档的数据模型使它能很容易地在多台服务器之间进行数据分割。MongoDB能够自动处理跨集群的数据和负载,自动重新分配文档,以及将
用户的请求路由到正确的机器上。这样,开发者能够集中精力编写应用程序,而不需要考虑如何扩展的问题。如果一个集群需要更大的容量,只需要向集群添加新服务器,
MongoDB就会自动将现有的数据向新服务器传送
3、丰富的功能
MongoDB作为一款通用型数据库,除了能够创建、读取、更新和删除数据之外,还提供了一系列不断扩展的独特功能
#1、索引
支持通用二级索引,允许多种快速查询,且提供唯一索引、复合索引、地理空间索引、全文索引
#2、聚合
支持聚合管道,用户能通过简单的片段创建复杂的集合,并通过数据库自动优化
#3、特殊的集合类型
支持存在时间有限的集合,适用于那些将在某个时刻过期的数据,如会话session。类似地,MongoDB也支持固定大小的集合,用于保存近期数据,如日志
#4、文件存储
支持一种非常易用的协议,用于存储大文件和文件元数据。MongoDB并不具备一些在关系型数据库中很普遍的功能,如链接join和复杂的多行事务。省略
这些的功能是处于架构上的考虑,或者说为了得到更好的扩展性,因为在分布式系统中这两个功能难以高效地实现
4、卓越的性能
MongoDB的一个主要目标是提供卓越的性能,这很大程度上决定了MongoDB的设计。MongoDB把尽可能多的内存用作缓存cache,视图为每次查询自动选择正确的索引。
总之各方面的设计都旨在保持它的高性能
虽然MongoDB非常强大并试图保留关系型数据库的很多特性,但它并不追求具备关系型数据库的所有功能。只要有可能,数据库服务器就会将处理逻辑交给客户端。
这种精简方式的设计是MongoDB能够实现如此高性能的原因之一
二. MongoDB基础知识
1、文档是MongoDB的核心概念。文档就是键值对的一个有序集{‘msg‘:‘hello‘,‘foo‘:3}。类似于python中的有序字典。
需要注意的是:
#1、文档中的键/值对是有序的。
#2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
#3、MongoDB区分类型和大小写。
#4、MongoDB的文档不能有重复的键。
#5、文档中的值可以是多种不同的数据类型,也可以是一个完整的内嵌文档。文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
文档键命名规范:
#1、键不能含有\0 (空字符)。这个字符用来表示键的结尾。
#2、.和$有特别的意义,只有在特定环境下才能使用。
#3、以下划线"_"开头的键是保留的(不是严格要求的)。
2、集合就是一组文档。如果将MongoDB中的一个文档比喻为关系型数据的一行,那么一个集合就是相当于一张表
#1、集合存在于数据库中,通常情况下为了方便管理,不同格式和类型的数据应该插入到不同的集合,但其实集合没有固定的结构,这意味着我们完全可以把不同格式和类型的数据统统插入一个集合中。
#2、组织子集合的方式就是使用“.”,分隔不同命名空间的子集合。
比如一个具有博客功能的应用可能包含两个集合,分别是blog.posts和blog.authors,这是为了使组织结构更清晰,这里的blog集合(这个集合甚至不需要存在)跟它的两个子集合没有任何关系。
在MongoDB中,使用子集合来组织数据非常高效,值得推荐
#3、当第一个文档插入时,集合就会被创建。合法的集合名:
集合名不能是空字符串""。
集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
集合名不能以"system."开头,这是为系统集合保留的前缀。
用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。
3、数据库:在MongoDB中,多个文档组成集合,多个集合可以组成数据库
数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串:
#1、不能是空字符串("")。
#2、不得含有‘ ‘(空格)、.、$、/、\和\0 (空字符)。
#3、应全部小写。
#4、最多64字节。
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
#1、admin: 从身份认证的角度讲,这是“root”数据库,如果将一个用户添加到admin数据库,这个用户将自动
获得所有数据库的权限。再者,一些特定的服务器端命令也只能从admin数据库运行,如列出所有数据库或关闭服务器
#2、local: 这个数据库永远都不可以复制,且一台服务器上的所有本地集合都可以存储在这个数据库中
#3、config: MongoDB用于分片设置时,分片信息会存储在config数据库中
4、强调:把数据库名添加到集合名前,得到集合的完全限定名,即命名空间
例如:
如果要使用cms数据库中的blog.posts集合,这个集合的命名空间就是
cmd.blog.posts。命名空间的长度不得超过121个字节,且在实际使用中应该小于100个字节
三.MongoDB的安装与使用
【01】windows下安装首先去官网下载:
https://www.mongodb.com/dr/fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-3.4.4-signed.msi/download
【02】下载后安装,安装完毕后,将bin目录配置到系统的环境变量中去
【03】进入到安装目录下新建文件夹:
首先新建一个data目录:
D:\ProfessionalSoftwares\mongodb\data
然后在data目录下新建两个文件夹:db和logs
最后在logs目录下新建一个文件:mongo.log
【04】现在我们将mongoDB做成一个服务然后在后台运行,这样我们每次开机就可以使用MongoDB服务端了:
首先以管理员身份运行cmd命令行,然后在命令行中执行如下的命令:(因为我配置了环境变量,所以可以直接使用
mongod命令)
mongod --bind_ip 0.0.0.0 --logpath D:\ProfessionalSoftwares\mongodb\data\logs\mongo.log
--logappend --dbpath D:\ProfessionalSoftwares\mongodb\data\db --port 27017
--serviceName "MongoDB" --serviceDisplayName "MongoDB" --install --auth
上述--install参数表示将mongodb作为一个服务进行安装,--auth表示我客户端链接mongodb服务端时,需要输入指定的用户名和密码
安装完毕后,然后在刚才开启的管理员cmd命令行中启动MongoDB服务:
net start MongoDB 这里的MongoDB就是上面命令中的服务名:serviceName
另外如果需要关闭MongoDB这个服务,只需要使用net stop MongoDB即可
【05】最终操作完毕后,我们在浏览器中输入如下的网址:http://localhost:27017/
显示这句话就表示我们安装成功:
It looks like you are trying to access MongoDB over HTTP on the native driver port.
2.账号管理
数据库一般都是有相应的账号和密码的,MongoDB也有:
#账号管理,参考官网地址:https://docs.mongodb.com/master/tutorial/enable-authentication/
#1、创建账号,这里我们相当于创建了一个管理员账号root,然后在使用Robomongo登入数据库时,需要输入验证,
要不然会报错:Failed to execute "listdatabases" command. 笔者在这里坑了好久
默认情况下,MongoDB存在两个数据库:admin和test,我们创建管理员账户时,一般都在admin数据库下
注意下面的步骤,都是需要在管理员权限的cmd命令行下执行:
接着上面的说,在初始环境下登入到MongoDB数据库后,我们直接使用admin数据库,然后创建账号
use admin
db.createUser(
{
user: "root",
pwd: "cisco123",
roles: [ { role: "root", db: "admin" } ]
}
)
#2、重启数据库
创建完管理员账号和密码后,我们首先退出MongoDb数据库,然后将刚才安装的MongoDB数据库服务移除:
先关闭服务:net stop MongoDB
然后删除:
mongod --remove
移除后,我们再来重新安装服务,这次安装我们加入了--auth参数,
该参数表示,下次客户端连接MongoDB数据库时候,需要输入用户名和密码,如下所示:
mongod --bind_ip 0.0.0.0 --logpath D:\ProfessionalSoftwares\mongodb\data\logs\mongo.log --logappend --dbpath D:\ProfessionalSoftwares\mongodb\data\db --port 27017 --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install --auth
然后再来重启服务:
net start MongoDB
现在我们来使用账号和密码登入MongoDB数据库,注意后面我们需要指定相应的数据库名称:admin
因为我们的管理员账号和密码是在admin数据库下新建的:
#3、登录:注意使用双引号而非单引号
mongo --port 27017 -u "root" -p "cisco123" --authenticationDatabase "admin"
也可以在登录之后用db.auth("账号","密码")登录
mongo
use admin
db.auth("root","cisco123")
关于MongoDB的详细信息可以关注这篇博客:
#推荐博客:https://www.cnblogs.com/zhoujinyi/p/4610050.html
1、在概念上,MongoDB的文档与Javascript的对象相近,因而可以认为它类似于JSON。
JSON(http://www.json.org)是一种简单的数据表示方式:其规范仅用一段文字就能描述清楚(其官网证明了这点),且仅包含六种数据类型。
2、这样有很多好处:易于理解、易于解析、易于记忆。然而从另一方面说,因为只有null、布尔、数字、字符串、
数字和对象这几种数据类型,所以JSON的表达能力有一定的局限。
3、虽然JSON具备的这些类型已经具有很强的表现力,但绝大数应用(尤其是在于数据库打交道时)都还需要其他一些重要的类型。
例如,JSON没有日期类型,这使得原本容易日期处理变得烦人。另外,JSON只有一种数字类型,无法区分浮点数和整数,更别区分32位和64位了。再者JSON无法表示其他一些通用类型,如正则表达式或函数。
4、MongoDB在保留了JSON基本键/值对特性的基础上,添加了其他一些数据类型。在不同的编程语言下,这些类型的确切表示有些许差异。下面说明了MongoDB支持的其他通用类型,以及如何使用它们
网络爬虫之MongoDB数据库的使用
标签:用户创建 x86 令行 价格 info 数据库服务器 net 带宽 存在