zoukankan      html  css  js  c++  java
  • MongoDB学习笔记

    Nosql简介:

    NoSQL(Not Only SQL),意即“不仅仅是SQL“,指的是非关系型数据库。是一种全新的数据库革命性运动,早期就有人提出,发展至2009年趋勢越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是种全新的思维的注入。

    关系型数据库中的表都是存储一些结构化的数据,每条记录的字段的组成都一样,即使不是每条记录都需要所有的字段,但数据库会为每条数据分配所有的字段。而非关系型数据库以键值对(key-value)存储,它的结构不固定,每一条记录可以有不一样的键,每条记录可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。

    常见的NoSql(非关系型数据库)数据库

     NoSql数据库优缺点

    在优势方面主要体现在下面几点:

    简单的扩展
    快速的读写
    低廉的成本
    灵活的数据模型

    在不足方面主要有下面几点:

    不提供对SQL的支持
    支持的特性不够丰富
    现有的产品不够成熟

     MongoDB简介

          MongoDB是用C++语言编写的非关系型数据库。特点是高性能、易部署、易使用,存储数据十分方便,主要特性有:面向集合存储,易于存储对象类型的数据模式自由

          支持动态查询

          支持完全索引,包含内部对象支持复制和故障恢复

          使用高效的二进制数据存储,包括大型对象文件存储格式为BSON(一种JSON的扩展)

    1.关系型数据的表的rcord必须保证拥有每一个field

    2.mongoDB的每一个document的key可以不一样

    3.关系型数据查询使用SQL

    4.mongoDB查询使用内置find函数--->>>基于BSON的特有查询工具

    1.逻辑结构关系的对比:

    MongoDB基本概念介绍:

    交档(document)是MongoDB中数据的基本单元,
    非常类似于关系型数据库系统中的行(但是比行要复杂的多)
    集合(collection)就是一组文档, 
    如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表
    MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限
    MongoDB自带简洁但功能强大的JavaSariptshell,这个工具对于管理MongoDB实例和操作数据作用非常大
    每一个文档都有一一个特殊的键id",它在文档所处的集合中是唯一的,相当于关系数据库中的表的主键

    MongoDB的安装:

    本机环境:

    ubuntu18.04

    sudo apt-get install mongodb

    启动:

    默认端口:27017

    mongod

     windows平台:

    连接:

    mongo

    MongoDB数据类型: 

    MongoDB常用操作:CRUD

    mongo  的命令 连接到数据库
    
    创建集合:
        显示创建:db.createCollection("heima1")
        隐式创建:直接在创建集合的同时往集合里添加数据
    增删改查语法,过一遍即可
    
    //更新   update tableName  set   ""  where conditon
    1:用于设置更新的条件
    2:用于设置更新的内容的对象
    3:如果记录已经存在,更新它,否则新增一个记录,取值为0或1
    4:如果有多条记录被满足,是否全部更新.. (1更新全部)(0更新1条)
    db.collectionName("condition","objectValue")
    
    3:建立索引的目的就是加速查询..
    普通索引:
    db.collectionName.ensureIndex({key:1})
    唯一索引:
    db.collectionName.ensureIndex({key:1},{unique:true})
    在某一个key 上面建立的唯一索引,这个key 对应的值不能重复添加..
    
    
    4:固定集合:固定集合指的是事先创建而且大小固定的集合 。
    固定集合很像环形队列,如果空间不足,最早的文档就会被删除,
    为新的文档腾出空间。一般来说,固定集合适用于任何想要自动淘汰过期属性的场景,没有太多的操作限制。
    
    
    5:备份 与 恢复
    //先把数据从数据当中通过命令导出来,然后我们删掉数据库当中的数据,再把导出来的数据恢复到数据库当中...
    
    mongodb bin 目录下提供的命令
    
    mongodump 备份
    
    mongorestore 恢复..
    
    6:导入导出
    
    mongoexport 
    
    mongoimport
    
    7:数据库安全:
    
    1:至少需要有个管理员账号,admin 数据库当中的用户都会被视为管理员
    (连接到admin 数据库当中,添加一个管理员账号)
    2:我有了管理员的账号为其它的数据库分配账号(操作数据来说,读,写) 
    (为test 分配读,写的账号)
    3:重启我的mongodb ,开启安全检查
    
    4:客户端重新连接mongdb ,接下来操作数据的部分都需要登录。。
    
    
    5:集群
    
    1:主从集群
    
    2:副本集:副本集就是有自动故障恢复功能的主从集群。
        主从集群和副本集最大的区别就是副本集没有固定的“主节点”
        2.1:副本集当中最少保证要有两个节点
        2.2:副本集当中的备份节点只做数据备份或者故障恢复的功能
    6:分布式存储
    
    分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程。有时也用分区(partitioning)来表示这个概念。将数据分散到不同的机器上,不需要功能强大的大型计算机就可以储存更多的数据,处理更多的负载。
    重点理解片键
    
    7:使用java 代码 来调用mongodb 
    连接其它的数据库的时候连接的驱动包
    使用mongodb 提供的客户端的api 
    
    
    java  nio  netty  mina
    View Code

    支持类似js语法输入

    创建集合:

    删除集合:

    查看数据库信息:

     

    查看集合:

    条件表达式: 

    统计分页排序

     

     查询包含关系: 

     $all

     $in

     

     $nin

     $or

     $exists

    游标 

    更新集合: 

     例子:

    $set

    $inc

     删除键:

    索引:

    目的:加速查询

    新建索引:

    固定集合:

    capped collection:

    固定集合:

    固定集合指的是事先创建而且大小固定的集合 。固定集合很像环形队列,如果空间不足,最早的文档就会被删除,
    为新的文档腾出空间。一般来说,固定集合适用于任何想要自动淘汰过期属性的场景,没有太多的操作限制。

    备份与恢复

    备份:

     恢复:

    导入和导出

    导出:

    导入:

      

    安全认证

    安全认证

    新版的MongoDB已经不支持addUser方法了:参考

    db.createUser({user:'root',pwd:'123456',roles:['userAdminAnyDatabase']})

    数据库安全:

    1:至少需要有个管理员账号,admin 数据库当中的用户都会被视为管理员
    (连接到admin 数据库当中,添加一个管理员账号)
    2:我有了管理员的账号为其它的数据库分配账号(操作数据来说,读,写)
    (为test 分配读,写的账号)
    3:重启我的mongodb ,开启安全检查

    4:客户端重新连接mongdb ,接下来操作数据的部分都需要登录。

    MongoDB的主重复制

    主从复制:

     

    操作:

    MongoDB的副本集

    副本集:副本集就是有自动故障恢复功能的主从集群。
    主从集群和副本集最大的区别就是副本集没有固定的“主节点”
    2.1:副本集当中最少保证要有两个节点
    2.2:副本集当中的备份节点只做数据备份或者故障恢复的功能

    定义:

    以三个节点为例:

    启动:

    初始化:

    查询主库: 

     图示:

     

    MongoDB的分布式存储

     分片(sharding)分布式存储

     

    分片:

     步骤:

    添加数据:

    图示

    所用JAVA代码调用MongoDB

    import java.net.UnknownHostException;
    
    import org.junit.Test;
    
    import com.mongodb.BasicDBObject;
    import com.mongodb.DB;
    import com.mongodb.DBCollection;
    import com.mongodb.DBCursor;
    import com.mongodb.DBObject;
    import com.mongodb.Mongo;
    
    /**
     * 使用java 代码调用mongodb 
     * @author Administrator
     *
     */
    public class MongoDao {
        @Test
        public void add() throws UnknownHostException{
            Mongo mongo=new Mongo("127.0.0.1", 27017);
            
            DB db=mongo.getDB("test");
            
            DBCollection collection=db.getCollection("person");
            //{key:value,key:value}
            BasicDBObject dbObject=new BasicDBObject();
            
            dbObject.put("name", "蒋珍珍");
            
            dbObject.put("age", 18);
            
            dbObject.put("sex", "");
            
            collection.insert(dbObject);
            
            mongo.close();
        }
        @Test
        public void del() throws UnknownHostException{
            Mongo mongo=new Mongo("127.0.0.1", 27017);
            
            DB db=mongo.getDB("test");
            
            DBCollection collection=db.getCollection("person");
            //{key:value}
            
            
            //{$nor:[{name:”user2”},{age:3}]
            //db.collection.find({age:{$gt:10}})
            //{}
            DBObject dbObject=new BasicDBObject();
            //dbObject.put("key",{})  {key:{}}
            
            
            collection.remove(dbObject);
            
            mongo.close();
            
        }
        public void update(){
            
        }
        @Test
        public void query() throws UnknownHostException{
            Mongo mongo=new Mongo("127.0.0.1", 27017);
            
            DB db=mongo.getDB("test");
            
            DBCollection collection=db.getCollection("person");
            
    //        BasicDBObject dbObject=new BasicDBObject();
            
    //        dbObject.put("name", "蒋珍珍");
            DBCursor dbCursor=collection.find();
            
            while(dbCursor.hasNext()){
                System.out.println(dbCursor.next().toString());
            }
            
        }
    
    }
    View Code

    游戏的架构

     为什么连接无需数据库驱动?

    XMPP的简介

  • 相关阅读:
    网页制作--标签,表格,表单,框架
    sql数据库框架
    数据库的触发器
    数据库的复制与附加
    sql数据库随笔
    sql常用函数
    sql数据类型、约束
    sql数据库查询
    数据库增删改查
    数据库基本概念
  • 原文地址:https://www.cnblogs.com/biaogejiushibiao/p/10345886.html
Copyright © 2011-2022 走看看