【MangoDB】介绍与安装

1、MangoDB简介

  MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库。 不采用关系型主要是为了得到更好得扩展性。固然还有一些其余好处,与关系数据库相比,面向文档的数据库再也不有“行“(row)的概念取而代之的是更为灵活的“文档”(document)模型。 经过在文档中嵌入文档和数组,面向文档的方法可以仅使用一条记录来表现复杂的层级关系,这与现代的面向对象语言的开发者对数据的见解一致。 另外,再也不有预约义模式(predefined schema):文档的键(key)和值(value)再也不是固定的类型和大小。因为没有固定的模式,根据须要添加或删除字段变得更容易了。一般因为开发者可以进行快速迭代,因此开发进程得以加快。并且,实验更容易进行。开发者能尝试大量的数据模型,从中选一个最好的。html

2、易扩展

应用程序数据集的大小正在以难以想象的速度增加。随着可用带宽的增加和存储器价格的降低,即便是一个小规模的应用程序,须要存储的数据量也可能大的惊人,甚至超出了不少数据库的处理能力。过去很是罕见的T级数据,如今已是司空见惯了。 因为须要存储的数据量不断增加,开发者面临一个问题:应该如何扩展数据库,分为纵向扩展和横向扩展,纵向扩展是最省力的作法,但缺点是大型机通常都很是贵,并且当数据量达到机器的物理极限时,花再多的钱也买不到更强的机器了,此时选择横向扩展更为合适,但横向扩展带来的另一个问题就是须要管理的机器太多。 MongoDB的设计采用横向扩展。面向文档的数据模型使它能很容易地在多台服务器之间进行数据分割。MongoDB可以自动处理跨集群的数据和负载,自动从新分配文档,以及将 用户的请求路由到正确的机器上。这样,开发者可以集中精力编写应用程序,而不须要考虑如何扩展的问题。若是一个集群须要更大的容量,只须要向集群添加新服务器,MongoDB就会自动将现有的数据向新服务器传送。mysql

 

3、功能全

MongoDB做为一款通用型数据库,除了可以建立、读取、更新和删除数据以外,还提供了一系列不断扩展的独特功能sql

一、索引mongodb

支持通用二级索引,容许多种快速查询,且提供惟一索引、复合索引、地理空间索引、全文索引数据库

二、聚合数组

支持聚合管道,用户能经过简单的片断建立复杂的集合,并经过数据库自动优化浏览器

三、特殊的集合类型缓存

支持存在时间有限的集合,适用于那些将在某个时刻过时的数据,如会话session。相似地,MongoDB也支持固定大小的集合,用于保存近期数据,如日志安全

四、文件存储服务器

支持一种很是易用的协议,用于存储大文件和文件元数据。MongoDB并不具有一些在关系型数据库中很广泛的功能,如连接join和复杂的多行事务。省略 这些的功能是处于架构上的考虑,或者说为了获得更好的扩展性,由于在分布式系统中这两个功能难以高效地实现。

4、卓越的性能

MongoDB的一个主要目标是提供卓越的性能,这很大程度上决定了MongoDB的设计。MongoDB把尽量多的内存用做缓存cache,视图为每次查询自动选择正确的索引。 总之各方面的设计都旨在保持它的高性能 虽然MongoDB很是强大并试图保留关系型数据库的不少特性,但它并不追求具有关系型数据库的全部功能。只要有可能,数据库服务器就会将处理逻辑交给客户端。这种精简方式的设计是MongoDB可以实现如此高性能的缘由之一。

5、重要概念

 

6、注意事项

须要注意的是:
#一、文档中的键/值对是有序的。
#二、文档中的值不只能够是在双引号里面的字符串,还能够是其余几种数据类型(甚至能够是整个嵌入的文档)。
#三、MongoDB区分类型和大小写。
#四、MongoDB的文档不能有重复的键。
#五、文档中的值能够是多种不一样的数据类型,也能够是一个完整的内嵌文档。文档的键是字符串。除了少数例外状况,键可使用任意UTF-8字符。

文档键命名规范:
#一、键不能含有\0 (空字符)。这个字符用来表示键的结尾。
#二、.和$有特别的意义,只有在特定环境下才能使用。
#三、如下划线"_"开头的键是保留的(不是严格要求的)。

7、下载安装

4.0下载地址: https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.8-signed.msi

安装时去除多余的组件安装提升速度:

 

 

此时MongoDB已经开启,浏览器访问http://localhost:27017/,页面上输出: It looks like you are trying to access MongoDB over HTTP on the native driver port.

说明MongoDB已经启动了,且它的默认端口(27017)没有被占用。

开始使用:

运行bin下的终端程序mongo.exe 其与mysql性质相同都是客户端!

'mongo' 看见欢迎信息则说明登陆成功

此时没有任何的权限限制,默认是管理员角色。

8、建立帐号

#一、建立帐号
use admin 
db.createUser(
  {
    "user": "root",
    "pwd": "123",
    "roles": [ { "role": "root","db": "admin" } ]
  }
)

use test
db.createUser(
  {
    "user": "jerry",
    "pwd": "123",
    "roles": [ { "role": "readWrite", db: "test" },
             { "role": "read", "db": "db1" } ]
  }
)

在mongodb中用不一样的数据库来区分权限,要管理哪一个数据库就在哪一个数据库下建立用户便可,建立管理员帐户则在admin下建立!
db 是一个全局变量 表示当前数据库
db.createUser()是调用一个内部函数用于建立用户
每一个帐号能够具有多个角色
更多角色请见:http://www.javashuo.com/article/p-cqbjelkg-cv.html

9、开启帐号认证

默认状况下mongodb不会加载认证信息就像mysql跳过受权表同样,建立完帐号用户须要开启用户认证。

具体方法:

  修改配置文档mongod.cfg(位置:安装目录\bin下)

  首先,将bind_ip改成0.0.0.0(让其余电脑能够访问,用于远程链接)

security:
    authorization: enabled
# 注意缩进

而后找到#secuity:改为下图所示,开启安全认证。

 

而后重启MongDB Server服务,启用认证。

10、帐号测试

#直接mongo进入程序  已经没法查看数据库

show dbs 
#登陆方式1:  authenticationDatabase指定数据库
mongo --port 27017 -u "root" -p "123" --authenticationDatabase "admin"

#登陆方式2:进入mongo后,进入某个数据库中,再输入密码
use admin
db.auth("root","123")

#删除帐号
db.dropUser('用户名');

#修改密码
db.changeUserPassword(用户名, 新密码);
相关文章
相关标签/搜索