博客
关于我
mongoDB详解
阅读量:793 次
发布时间:2023-02-09

本文共 2322 字,大约阅读时间需要 7 分钟。

MongoDB详解

MongoDB是一个NoSQL数据库,具有高性能、无模式、文档型的特点。它是NoSQL数据库中功能最丰富,最像关系数据库的。

MongoDB基本介绍

MongoDB数据库的最小数据集是文档,类似于MySQL的数据记录。集合则是由一组文档构成,类似于MySQL的表。库是数据库的独立实例,拥有自己的用户和权限。实例则指系统运行的MongoDB进程。

MongoDB作为NoSQL数据库,具有以下特性:

  • 面向集合文档存储:适合存储JSON格式数据。
  • 格式自由:数据结构变更不会影响程序运行。
  • 面向对象:支持大部分关系型数据库的查询。
  • 索引支持:提升查询效率。
  • 复制和故障转移:支持数据复制和自动故障转移。
  • 分片集群:通过分片集群提升查询性能。

适用场景包括:应用不需要事务,数据模型难以确定,QPS达到2000以上,存储量达到TB级别,需要进行地理位置或文本查询的场景,如游戏、社交、物流、物联网和视频直播等。

MongoDB安装与使用

安装步骤

  • 准备环境:安装完 JDK后,访问MongoDB官网,下载适合Linux的安装包。
  • 下载并解压:使用wget命令下载压缩包。
  • 配置环境变量:通过vi编辑/etc/profile文件,添加MongoDB的环境变量。
  • 创建数据存储目录:mkdir mongodb-data,mkdir datamkdir logs。
  • 启动MongoDB:在bin目录执行mongod命令,指定数据和日志路径。
  • 连接测试:使用mongoclient连接MongoDB,查看数据库状态。
  • 默认数据库包括admin、config和local,用于存储系统配置和副本集元数据。


    MongoDB基本命令

    文档操作

    • 切换或创建库use database切换库,或db.createCollection(name)创建集合。
    • 插入数据db.collection.insert()插入单条数据,或db.collection.insertMany()批量插入。
    • 查询数据db.collection.find()查询全部文档,db.collection.findOne()查询单条数据。
    • 条件查询:通过find()方法传入过滤条件和投影。
    • 更新操作db.collection.update()更新单条数据,或db.collection.updateMany()批量更新。
    • 删除操作db.collection.remove()删除单条或全部数据。
    • 统计操作db.collection.count()统计文档数量。
    • 分页与排序limit()限制返回条数,skip()跳过数据,sort()排序。
    • 范围查询:使用$gt$lt等操作符。
    • 索引操作createIndex()创建索引,dropIndex()删除索引。
    • 加锁fsyncLock()加锁,fsyncUnlock()解锁。
    • 事务操作:虽然MongoDB不推荐使用事务,但支持通过startTransaction()管理。

    复制集

    复制集是MongoDB的高可用架构,采用一主多从结构。主节点负责写操作,从节点负责读取和故障恢复。

    从节点分为几类:

    • 主从节点:负责数据复制和读取。
    • 从主节点:仅复制数据,不参与选举。
    • 选举从节点:具备选举功能,但不推荐使用。

    复制集特性:

    • 数据分发:数据分布到多个节点,提升读取速度。
    • 读写分离:提高并发处理能力。
    • 异地容灾:数据备份与恢复。

    复制集搭建

    配置文件示例

    systemLog:  destination: file  path: /data/db1/mongod.log  logAppend: truestorage:  dbPath: /data/db1net:  bindIp: 0.0.0.0  port: 28017replication:  replSetName: rs0processManagement:  fork: true

    启动命令:mongod -f /data/db1/mongod.conf

    复制集初始化

  • 在主节点执行:rs.initiate()
  • 添加从节点:rs.add("centosvm:28018")
  • 查看状态:rs.status()
  • 在主节点插入数据后,从节点执行:rs.slaveOk(),验证数据同步。

  • 复制集写策略

    写操作通过writeConcern控制确认次数。writeConcern:{w:n}指定确认节点数,j参数控制是否写入journal日志。


    复制集读策略

    读取策略通过readPreference控制节点选择。readConcern控制读取的数据一致性。

    策略类型:

    • primary:只读主节点。
    • secondary:只读从节点。
    • nearest:读取地理位置最近的节点。

    分片集群

    分片集群通过多个复制集横向扩展,提升数据处理能力。

    架构包括:

    • 路由节点:提供统一入口,低配置即可。
    • 配置节点:存储分片元数据,使用hash分片。
    • 数据节点:存储分片数据,支持横向扩容。

    分片数量计算:

    • 总存储量/单台容量
    • 工作集大小/单台硬盘容量(0.6)
    • 并发总数/单台并发数(0.7)

    数据备份

    MongoDB提供两种备份方式:

  • 延迟节点备份:利用从节点的延迟复制备份数据。
  • 全量备份+oplog:结合复制日志进行全量恢复。
  • 备份策略:

    • 复制文件:关闭数据库复制文件,推荐使用hidden节点。
    • 文件快照:直接获取数据库镜像。
    • mongodump:生成备份文件,支持恢复指定时间点的数据。

    通过全量备份和oplog日志,能够快速恢复到指定时间点的数据状态。

    转载地址:http://tsffk.baihongyu.com/

    你可能感兴趣的文章
    Mysql order by与limit混用陷阱
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    mysql replace用法
    查看>>
    Mysql Row_Format 参数讲解
    查看>>
    mysql select as 多个_MySQL 中 根据关键字查询多个字段
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>
    MySQL Server 5.5安装记录
    查看>>
    mysql server has gone away
    查看>>
    mysql skip-grant-tables_MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
    查看>>
    mysql slave 停了_slave 停止。求解决方法
    查看>>
    MySQL slow_query_log慢查询日志配置详解
    查看>>
    MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
    查看>>
    MySQL sql_mode=only_full_group_by问题解决办法
    查看>>
    MYSQL sql语句针对数据记录时间范围查询的效率对比
    查看>>
    mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
    查看>>