zoukankan      html  css  js  c++  java
  • 【MangoDB】介绍与安装

    一、MangoDB简介

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

    二、易扩展

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

    三、功能全

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

    1、索引

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

    2、聚合

    支持聚合管道,用户能通过简单的片段创建复杂的集合,并通过数据库自动优化

    3、特殊的集合类型

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

    4、文件存储

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

    四、卓越的性能

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

    五、重要概念

    六、注意事项

    需要注意的是:
    #1、文档中的键/值对是有序的。
    #2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
    #3、MongoDB区分类型和大小写。
    #4、MongoDB的文档不能有重复的键。
    #5、文档中的值可以是多种不同的数据类型,也可以是一个完整的内嵌文档。文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
    
    文档键命名规范:
    #1、键不能含有 (空字符)。这个字符用来表示键的结尾。
    #2、.和$有特别的意义,只有在特定环境下才能使用。
    #3、以下划线"_"开头的键是保留的(不是严格要求的)。

    七、下载安装

    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' 看见欢迎信息则说明登录成功

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

    八、创建账号

    #1、创建账号
    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()是调用一个内部函数用于创建用户
    每个账号可以具备多个角色
    更多角色请见:https://www.cnblogs.com/SamOk/p/5162767.html

    九、开启账号认证

    默认情况下mongodb不会加载认证信息就像mysql跳过授权表一样,创建完账号用户需要开启用户认证。

    具体方法:

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

      首先,将bind_ip改为0.0.0.0(让其他电脑可以访问,用于远程连接)

    security:
        authorization: enabled
    # 注意缩进

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

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

    十、账号测试

    #直接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(用户名, 新密码);
  • 相关阅读:
    错误处理
    触发器
    存储过程
    用户自定义函数
    动态 SQL
    临时表
    游标
    流程控制元素
    锁定和阻塞
    Spring内置事件以及自定义事件
  • 原文地址:https://www.cnblogs.com/846617819qq/p/10710743.html
Copyright © 2011-2022 走看看