NoSQL优势

全称:Not Only SQL 不仅仅是数据库

  • 海量的扩展能力
  • 读写高性能
  • 与关系型数据库(RDBMS)相辅相成

NoSQL产品

  • 键值存储型(Key-Value) Redis/Codis

  • 列存储型 HBase

Hbase数据分析用的比较多
  • 图形(Graph)数据库
Neo4j知识图片用的较多
  • 文档型 MongoDB

MongoDB概念

举例:描述人
  • 关系型数据库

  • MongoDB

MongoDB特性

  • 可扩展(scalable)
  • 高性能(high-performance)
  • 开源(open source) NoSQL database
  • C++语言编写
  • Document-Oriented Storage
  • Full Index Support
  • Replication & High Availability
  • Auto-Sharding
  • Rich Querying
  • Updates
  • Map/Reduce
  • GridFS 存储二进制文件

MongoDB稳定性

如何解决数据丢失

  • 恢复日志(journal)

  • 写关注

写入大多数节点


MongoDB高可用

核心业务SLASLA 99.99%以上怎么做到的?

MongoDB 副本集(replica set)

  • 数据多分冗余
  • 跨交换机部署
  • 更快的选举方式(参考raft协议)

架构

主从复制+高可用方案

分片

架构


1、对业务方来说没有分库分表的概念不管数据量多大 对业务方来说都是单库单表对于关系型数据库来说比如Myql有分库分表的概念比如1T数据 MongoDB分2个片 每一个片存储500G数据

2、Router可以有很多台3、分片信息存储在config server中4、一个分片就是一个副本集(replica set)5、Router先访问config server获取分片信息,Router再访问分片集(replica set)

表的分片(MongoDB Collection)


分片规则

Sharding Range-based

基于范围分片 用的较多

Mysql B+ Tree本质也是Range-based

Sharding Hash-based

取模分片

Java HashMap是Hash-based查询速度比较快不支持范围查询对于数据库来说 不支持范围查询肯定不合适

分片集群架构


1、3个配置节点、3个路由节点(mongos)都是stateless(无状态的即数据都一样)2、每个分片就是一个replica set(一主两从) 一个分片3台机器3、cnofig和mongos也可以混合部署在一个sharding上

应用场景


1、位置即GPS或LBS2、中小公司用它没有问题 量大肯定不行3、非交易相关的都可以用a、事务支持的比较弱b、mongodb 4.0已经支持事务 并且支持跨行事务

可扩展存储


1、最早的操作引擎是MMAP 支持表级锁 也是操作系统自带的一种机制缺点就是内存利用率不高

2、WireTigger支持行级锁

文档设计


_id 全局唯一标识 表粒度不填写默认生成一个12字节的objectid占用空间比较大 一般用业务主键比如uid等代替掉 否则和自增主键一样 无意义

_id默认生成规则(不推荐)


1、collection是表级

2、a、1位16进制占4个字节即4个bytes 代表一个字符串   b、一个字节占2位即2个字符串   c、_id 一共有12个字节即24个字符串

3、可读性很差 占空间比较大

_id推荐生成规则


1、uint64_t 其实就是long类型 占8个字节2、objectid是默认类型也是是整型、long类型、浮点型

Free Shcama

意味着重复的Schema、All Schema


如何应对


字段名选取


字段名简化了 如何保证可读性


MongoDB数据量限制

MongoDB限制每一个doc(文档)最大16MB

数据较少场景

考试成绩、个人信息

数据较多场景

三国杀和武将牌

常规引用关联


内嵌文档


日志场景引用更有效 Host&Log

机器和日志不能用内嵌 只能用引用


锁机制

悲观锁

悲观锁并发控制

  • 使用写锁来保护资源不被同时访问
  • 读写操作为互斥操作

悲观锁范围


1、sql解析2、创建一个写命令3、从磁盘中读文档 把数据读取到内存4、针对内存数据执行写命令5、对内存结构做修改(仅在这一步加锁)6、返回结果

乐观锁

MongoDB 3.0 WT MVCC机制

乐观派 lock-free并发控制


乐观锁意义


压缩算法

Snappy


Zlib(常用)


遇到的坑及解决方案

大量删除数据及解决方案

背景


解决方案


大量数据碎片(空洞)及解决方案

背景


大量删除数据 产生内存碎片


数据删除完之后 会留下很多空洞 不会马上回收

早期用的MMAP空洞数据也会加载到内存中去比如64G内存 大量空洞数据 有效数据仅占内存10G

解决方案


碎片整理方案

  • 线上数据压缩

  • 收缩数据库

具体数据收缩步骤


压缩效果对比


搜索前85G 压缩后34G 节省了51G内存 大大提升了性能

上述步骤大致流程

1、把从库 rm -rf *2、重启从库3、从主库重新同步一份 从库上面完全没有碎片4、主库上执行stepDown 主库变成从库 从库变成主库5、删掉从库 重启 再同步 同步完了 从库就变成新的了(删除之后同步数据 碎片数据不会同步)

注:a、一主二从 主库降权 数据最新的从库会提升为主b、主从同步之间丢失的数据 业务系统通过补偿机制保存MongoDB

面向文档的NoSQL数据库MongoDB相关推荐

  1. RethinkDB是什么?—— 面向文档的NOSQL数据库,MVCC+Btree索引,pushes JSON to your apps in realtime采用push思路,优化的ssd存储...

    RethinkDB是什么? RethinkDB是新一代的面向文档的数据库存储管理系统,原本是MySQL中针对SSD优化的一个存储引擎,后来脱离了MySQL成为了独立的系统. 数据如何存储在磁盘上? 数 ...

  2. 盘点11个面向文档的开源NoSQL数据库

    MongoDB是一个介于关系数据库和非关系数据库之间的产品, 是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型. ...

  3. MongoDB-概述:跨平台的面向文档的高性能高可用性易扩展数据库

    Table of Contents MongoDB-概述 数据库 采集 文件 样本文件 MongoDB教程 MongoDB-优势 MongoDB与RDBMS相比的优势 为什么要使用MongoDB? 在 ...

  4. MongoDB实战读书笔记(二):面向文档的数据

    1 schema设计原则 1.1 关系型数据库的三大设计范式 第一范式(1NF)无重复的列 第二范式(2NF)属性完全依赖于主键 [ 消除部分子函数依赖 ] 第三范式(3NF)属性不依赖于其它非主属性 ...

  5. NoSQL数据库-MongoDB和Redis

    NoSQL数据库-MongoDB和Redis   发布于2012-12-20,来源:比特网   1NoSQL简述 CAP(Consistency,Availabiity,Partitiontolera ...

  6. 文档型非关系数据库MongoDB经验总结

    文档型非关系数据库MongoDB 数据库基础概念 数据:能够输入到计算机中并被识别处理的信息集合 数据结构:研究一个数据集合中,数据元素关系 数据库:按照数据结构,存储管理数据的仓库.数据仓库是在数据 ...

  7. Nosql数据库MongoDB 理论+实践(JAVA API操作) 代码实践

    文章目录 一.数据库 数据库的概念: 数据库分类 关系型数据库 非关系型数据库 二.Mongo 存储的数据类型 下载 三个层次 基本指令(shell) 三.Mongo Manager Free 概念 ...

  8. 用python将word文档导入数据库_python读取word文档,插入mysql数据库的示例代码

    表格内容如下: 1.实现批量导入word文档,取文档标题中的数字作为编号 2.除取上面打钩的内容需要匹配出来入库入库,其他内容全部直接入库mysql # wuyanfeng # -*- coding: ...

  9. 论文解读丨LayoutLM: 面向文档理解的文本与版面预训练

    摘要:LayoutLM模型利用大规模无标注文档数据集进行文本与版面的联合预训练,在多个下游的文档理解任务上取得了领先的结果. 本文分享自华为云社区<论文解读系列二十五:LayoutLM: 面向文 ...

最新文章

  1. 刘政:别着急颠覆传统数据分析人才培养,先将落脚点放在实处
  2. vue.js 多图上传,并可预览
  3. 告别“臃肿”,选择微服务(文末福利)
  4. 百度定位sdk使用说明
  5. 带你深入探究云原生时代的分布式操作系统 Kubernetes
  6. 学习Spring-Cloud –基础结构和配置
  7. 数学之美!这些美轮美奂的数学动图
  8. 三角形分类(洛谷P5717题题解,Java语言描述)
  9. Gmail有充分理由启用SSL加密会话
  10. 密码与安全新技术总结
  11. emlog独立会员中心模板源码 UserEmlog Ver:1.0
  12. 机房收费管理系统 之 总结
  13. Oracle导出表数据客户端,使用PLSQL批量导出、导入表的数据(精简版的Oracle客户端亦可)...
  14. 慕课网仿去哪儿项目笔记--(三)-城市页面制作
  15. rar文件ubuntu_如何在Ubuntu上提取RAR文件
  16. DB_RECOVERY_FILE_DEST,LOG_ARCHIVE_DEST,LOG_ARCHIVE_DEST_N
  17. python实现Hangman游戏
  18. 疫情下的情人节 餐饮业再亏700亿!
  19. MATLAB 点云粗糙度计算
  20. 为什么无名管道只能用于具有亲缘关系的进程之间通信

热门文章

  1. 20210819_Test
  2. HTML学习二_HTML常用的行级标签,常用实体字符及表单标签
  3. MySQL 示例数据库 employees 详解
  4. Unity GPU Instancing的使用尝试
  5. 《Pro ASP.NET MVC 3 Framework》学习笔记之一【MVC的历程,优点,HelloWorld】
  6. Linux下TCP/IP优化
  7. RSync服务器配置
  8. Linux游戏开发包 ClanLib 2.1.0 发布
  9. FCS省选模拟赛 Day7
  10. Algs4-2.3.8Quick.sort()在处理N个全部重复的元素时比较次数