zoukankan      html  css  js  c++  java
  • MongoDB非关系型数据库

    关系型于非关系型

    NoSQL(not only sql)

    NoSQL,指的是 非关系型的数据库

    NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

    对NoSQL是普遍的解释是"非关联型的",强调 Key-Value Stores文档数据库的优点,而不是单纯的RDBMS。

    NoSQL用于超大规模数据的存储。

    这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

    Mongo和MySQL数据对比

    结构对比:

    MySQL mongo
    集合
    字段 key:value
    文档

    内容对比:

    ## mysql数据结构:
    name          age  job  
    oldzhang     28   it 
    xiaozhang    28     it
    xiaofei        18      student  SZ
    
    ## mongo数据结构:
    {name:'oldzhang',age:'28',job:'it'},
    {name:'xiaozhang',age:'28',job:'it'},
    {name:'xiaozhang',age:'28',job:'it',host:'SZ'}

    MongoDB

    高性能:

    • Mongodb提供高性能的数据库持久化

    • 尤其是支持嵌入式数据模型减少数据库系统上的I/O操作

    • 索引支持更快的查询,并且可以包括嵌入式文档和数组中的键

    丰富的语言查询:

    • Mongodb支持丰富的查询语言来支持读写操作(CRUD)以及数据汇总,文本搜索和地理空间查询

    高可用性:

    • Mongodb的复制工具,成为副本集,提供自动故障转移和数据冗余。

    水平可扩展性:

    • Mongodb提供了可扩展性,作为其核心功能的一部分,分片是将数据分在一组计算机上。

    支持多种存储引擎:

    • WiredTiger 存储引擎和 MMAPv1 存储和 InMemory 存储引擎

    Mong0DB应用场景

    应用场景:https://www.zhihu.com/question/32071167

    • 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新

    • 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来

    • 社交场景,使用 MongoDB 存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能

    • 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析

    • 视频直播,使用 MongoDB 存储用户信息、礼物信息等,用户评价

    • 电商场景,使用 MongoDB 电商上衣和裤子两种商品,除了有共同属性,如产地、价格、材质、颜色等外,还有各自不同的属性集,如上衣的独有属性是肩宽、胸围、袖长等,裤子的独有属性是臀围、脚口和裤长等

    MongoDB的安装与部署

    官方文档:https://docs.mongodb.com/manual/?_ga=2.57024426.1834178963.1557492386-816165234.1557492386

    规划目录

    目录位置
    软件所在位置 /opt/mongodb
    单节点目录 /opt/mongo_27017/{conf,log,pid}
    数据目录 /data/mogo_27017

    下载并解压

    下载地址:https://www.mongodb.org/dl/linux/

    yum install libcurl openssl -y
    #下载软件
    wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-3.6.13.tgz
    tar zxf mongodb-linux-x86_64-3.6.13.tgz -C /opt/
    cd /opt/
    ln -s mongodb-linux-x86_64-3.6.13 mongodb

    创建文件目录以及数据目录

    mkdir -p /opt/mongo_27017/{conf,log,pid}
    mv /data /data_bak
    mkdir -p /data/mongo_27017 

    配置启动mongo

    创建配置文件

    注:这里我们使用的是51主机,请注意配置文件下方

    cat > /opt/mongo_27017/conf/mongodb.conf<< EOF
    #与日志相关
    systemLog:
      #日志以文件保存
      destination: file
      #如果重启之后,不进行切割,在原来日志追加
      logAppend: true
      #日志路径
      path: /opt/mongo_27017/log/mongodb.log
    #与存储相关
    storage:
      journal:
          #记录回滚日志
        enabled: true
      #数据目录  
      dbPath: /data/mongo_27017
      #一个库就是一个文件夹
      directoryPerDB: true
      #存储引擎
      wiredTiger:
         engineConfig:
             #缓存大小
            cacheSizeGB: 1
            #索引单独存放
            directoryForIndexes: true
         collectionConfig:
             #启动压缩
            blockCompressor: zlib
         indexConfig:
            prefixCompression: true
    
    processManagement:
      #后台模式
      fork: true
      #pid日志文件
      pidFilePath: /opt/mongo_27017/pid/mongod.pid
    #网络
    net:
      port: 27017
      #可以使用localhost
      bindIp: 127.0.0.1,10.0.0.51
    EOF

    启动mongo

    /opt/mongodb/bin/mongod -f /opt/mongo_27017/conf/mongodb.conf
    
    #检查是否启动
    netstat -lntup|grep 27017
    tcp        0      0 10.0.0.51:27017         0.0.0.0:*               LISTEN      7632/mongod         
    tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      7632/mongod    

    配置登录mongo

    写入环境变量

    echo "export PATH=/opt/mongodb/bin:$PATH" >> /etc/profile
    source /etc/profile

    登录

    mongo

    关闭mongo

    方法一:使用localhost登录

    mongo localhost:27017
    use admin
    db.shutdownServer()

    方法二:

    mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown

    使用systemd管理

    [root@db01 ~]# cat > /etc/systemd/system/mongod.service <<EOF
    [Unit]
    Description=mongodb 
    After=network.target remote-fs.target nss-lookup.target
    [Service]
    User=mongod
    Type=forking
    ExecStart=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf --shutdown
    PrivateTmp=true  
    [Install]
    WantedBy=multi-user.target
    EOF
    
    systemctl restart mongod
    systemctl stop mongod
    systemctl start mongod

    mongo优化告警

    报警内容:内存不足

    解决办法:

    1. 添加内存

    2. 调整配置文件里的cache大小

    报警内容2:配置访问控制参数

    报错信息:WARNING: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted.

    报警内容3:不是以普通要不过户启动

    报错信息:WARNING: You are running this process as the root user, which is not recommended.

    解决方法:

    mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
    #创建用户并授权数据目录
    useradd mongo
    echo '123456'|passwd --stdin mongo
    chown -R mongo:mongo /opt/
    chown -R mongo:mongo /data/
    su - mongo
    mongod -f /opt/mongo_27017/conf/mongodb.conf 
    mongo

    注:这里出现问题,问题:文件没有全部授权,普通用户启动失败,请查看日志文件进行分析错误

    报警内容4:修改内核

    报错信息:WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. we suggest setting it to 'never'

    WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'

    解决方法:

    #临时解决
    建议将内核文件改成never
    echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
    echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
    mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
    mongod -f /opt/mongo_27017/conf/mongodb.conf
    mongo
    
    #写入开机自启动
    chmod +x /etc/rc.d/rc.local
    vim /etc/rc.d/rc.local
    echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
    echo "never" > /sys/kernel/mm/transparent_hugepage/defrag

    报警内容5:软件进程被限制

    报错信息:WARNING: soft rlimits too low. rlimits set to 31771 processes, 65535 files. Number of processes should be at least 32767.5 : 0.5 times number of files.

    #写入配置文件:
    vim /etc/profile
    ulimit -f unlimited
    ulimit -t unlimited
    ulimit -v unlimited
    ulimit -n 64000
    ulimit -m unlimited
    ulimit -u 64000
    
    #生效配置
    source /etc/profile
  • 相关阅读:
    关于android.view.WindowLeaked异常的解决方案
    android 使用shape使android组件呈现特殊效果
    (IOS)N duplicate symbols for architecture i386
    (IOS)国际本地化设置
    URL参数中有 特殊符号或加密数据 的问题解决
    S2S:分享出的营销机遇
    (IOS)Apple 证书相关
    (IOS)阻止文件被iTunes和iCloud同步
    (IOS)多线程开发
    时间复杂度
  • 原文地址:https://www.cnblogs.com/Mercury-linux/p/12697416.html
Copyright © 2011-2022 走看看