• NoSQL(一)


    一、什么是nosql

    NoSQL就是非关系型数据库,而mysql是关系型数据库。对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗费时间和资源,尤其是数据是需要从磁盘里去检索。而NoSQL数据库存储原理非常简单(典型的数据类型为k-v),不存在繁杂的关系链。

     NoSQL数据可以存储在内存里,查询速度非常快。NoSQL在性能表现上虽然能优于关系型数据库,但是它并不能完全替代关系型数据库。NoSQL因为没有复杂的数据结构,扩展非常容易,支持分布式

    二、常见的NoSQL数据库

    1.k-v形式的:memcachedredis 适合储存用户信息,比如会话、配置文件、参数、购物车等等。这些信息一般都和ID(键)挂钩,这种情景下键值数据库是个很好的选择。

    2.文档数据库:mongodb将数据以文档的形式储存每个文档都是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XMLJSON或者JSONB等多种形式存储。

    3.列存储   Cassandra, HBase 分布式文件系统

     

    4.     它不是放图形的,放的是关系比如:朋友圈社交网络、广告推荐系统,社交网络,推荐系统等。专注于构建关系图谱Neo4J, InfoGrid,OrientDB

     

    三、MongoDB介绍

    C++编写,基于分布式的,属于NoSQL的一种,NoSQL中是最像关系型数据库的。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档、数组及文档数组。

    关于JSON http://www.w3school.com.cn/json/index.asp

    因为基于分布式,所以很容易扩展

    四、MongoDB和关系型数据库对比

     

    关系型数据库数据结构

     

    MongoDB数据结构

     

    五、MongoDB安装

    cd /etc/yum.repos.d/
    vi mongodb-org-3.4.repo    //加入如下内容
    [mongodb-org-3.4]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
    yum list |grep mongodb    //可以看到mongodb相关的rpm包
    yum install -y mongodb-org

    六、MongoDB连接

    systemctl start mongod    //启动服务

    在本机可以直接运行命令mongo进入到mongodb shell

    如果mongodb监听端口并不是默认的27017,则在连接的时候需要加--port 选项,例如mongo --port 27018

    连接远程mongodb,需要加--host,例如mongo --host  127.0.0.1

    如果设置了验证,则在连接的时候需要带用户名和密码

    mongo -uusername -ppasswd --authenticationDatabase db

    七、MongoDB用户管理

    >use admin  //需要切换到admin库
    >db.system.users.find()  //列出所有用户,需要切换到admin库
    >show users;  //查看当前库下所有的用户
    > use sxt;  //创建数据库(mongo 中创建数据库采用的也是 use 命令,如果 use 后面跟的数据库名不存在,那么 mongo 将会新建该数据库。不过,实际上只执行 use 命令后,mongo 是不会新建该数据库的,直到 你像该数据库中插入了数据。)
    > show dbs;  //到这里并没有看到刚才新建的 sxt 数据库。
    > db.sxt.insert({"name":"testdb"});  //该操作会在 sxt 数据库中新建一个 hello 集合,并在其中插入一条记录。
    > show dbs;   //这样,便可以看到 mongo 的确创建了sxt 数据库,其中有一个 hello 集合。
    >db.dropUser(' ');  //删除用户
    > db.getMongo();  //查看当前db的链接机器地址
    > db.cloneDatabase("192.168.134.130");  //从指定主机上克隆数据库

     

    db.createUser( { user:"admin",customData:{description:"superuser"}, pwd: "admin122", roles: [ { role: "root", db: "admin" } ] } )

    //user指定用户,customData为说明字段,可以省略,pwd为密码,roles指定用户的角色,db指定库名

    若要用户生效,还需要编辑启动脚本:

    vi  /usr/lib/systemd/system/mongod.service

    OPTIONS=后面增  --auth

    systemctl restart mongod   //重启服务

    mongo -u "admin" -p "admin122" --authenticationDatabase "admin"

    use db1

    db.createUser( { user: "test1", pwd: "123aaa", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } )

    //test1用户对db1库读写,对db2库只读。

    之所以先use db1,表示用户在 db1 库中创建,就一定要db1库验证身份,即用户的信息跟随随数据库。比如上述 test1虽然有 db2 库的读取权限,但是一定要先在db1库进行身份验证,直接访问会提示验证失败。

    use db2

    db.auth("test1", "123aaa")

    八、MongoDB用户角色

    Read:允许用户读取指定数据库

    readWrite:允许用户读写指定数据库

    dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

    userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

    clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

    readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

    readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

    userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

    dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

    root:只在admin数据库中可用。超级账号,超级权限

    九、MongoDB库管理

    >db.version()  //查看版本
    > db.dropDatabase();  //删除数据库,要想删除某个库,必须切换到那个库下
    >db或db.getName();   //查看当前数据库
    > db.repairDatabase();      //修复当前数据库
    > db.stats();          //查看当前数据库状态

     

    >use userdb  //如果库存在就切换,不存在就创建
    >show dbs //查看库,此时userdb并没有出现,这是因为该库是空的,还没有任何集合,只需要创建一个集合就能看到了
    >db.createCollection('clo1') //创建集合clo1,在当前库下面创建
    >db.serverStatus()   //查看mongodb服务器的状态

    十、MongoDB创建集合

    >db.createCollection("mycol", { capped : true, size : 6142800, max : 10000 } )  

    //语法:db.createCollection(name,options)

                name就是集合的名字,options可选,用来配置集合的参数,参数如下:capped true/false (可选)如果为true,则启用封顶集合。封顶集合是 固定大小的集合,当它达到其最大大小,会自动覆盖最早的条目。如果指定true,则也需要指定尺寸参数。

                autoindexID  true/false (可选)如果为true,自动创建索引_id字段的默认值是false

                size (可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。单位B

                max (可选)指定封顶集合允许在文件的最大数量。

  • 相关阅读:
    mysql5.7 ERROR 1045 (28000): Access denied for user解决方法
    C++ json解决方案
    Gitblit无法查看单个文件解决方案
    git 拉取指定的远程分支(三种方式)
    全栈12
    git commit之后,想撤销commit
    video
    iframe
    git恢复之前版本的两种方法reset、revert
    Eclipse
  • 原文地址:https://www.cnblogs.com/sxt0103/p/14367984.html
Copyright © 2020-2023  润新知