大数据-大数据开发之路-mongodb

mongodb-最接近"mysql"的nosql数据库

MongoDB是一个开源、高性能、无模式的文档数据库,当初的设计就是用于简化开发方便扩展 ,是NoSQL数据库产品的一种,是最像关系型数据库(MySQL)的非关系型数据库。

它支持的数据结构非常松散,是一种类似于JSON的格式叫BSON,所以它既可以存比较复杂的数据类型,又相当的灵活。

关键特性

面向文档存储,易于存储对象类型的数据 数据结构符合大部分程序语言,文件存储格式为BSON(一种JSON的扩展) 可在文档内嵌入子文档(相当于传统数据库的嵌套表) 动态增减文档或修改文档格式,模式自由 高性能 支持基于内存查询,减少磁盘 IO 交互 支持使用嵌入数据,减少系统I/O负担,支持子文档查询 使用高效的二进制数据存储,包括大型对象 多种查询类型支持,且支持数据聚合查询、文本检索、地址位置查询,支持复杂的 SQL 查询 高可用、水平扩展,支持副本集与分片 多种存储引擎:WiredTiger , In-Memory

数据模型

和关系型数据库mysql很相似。

关键技术

WiredTiger存储引擎 WT的数据结构
WT的Cache采用Btree的方式组织,每个Btree节点为一个page。root page是btree的根节点,internal page是btree的中间索引节点,leaf page是存储数据的叶子节点;btree的数据以page为单位按需从磁盘加载或写入磁盘。 为什么MongoDB使用了B树而不是B+树

B+树只在叶子节点中储存数据,叶子节点之间有链表相连方便遍历和范围查询。B树在单个查询时性能优于B+树,在范围查询时需要遍历树,效率不如B+树直接遍历链表。
MySQL 作为关系型数据库,需要处理大量的范围查询和遍历,选用了B+树;而MongoDB 作为文档的数据库,更看重面向文档的简单查询,所以选择了查询单个文档性能较好的B树。 WT的持久化 预写日志(WAL): WT使用预写日志的机制,在数据更新时,先将数据更新写入到日志文件。日志的写入频率可以根据业务要求的可靠性等级配置,最严格的情况可以配置为集群中大部分节点都落盘后才将结果返回给客户端。 检查点(checkpoint): 在checkpoint操作开始时,WT提供指定时间点的数据库快照,并将快照中的所有数据以一致性方式写入到数据文件中。一旦checkpoint创建成功,WT保证数据文件和内存数据是一致的。当宕机重新启动时WT会先将数据恢复到最近的一次checkpoint的点,然后重放后续的操作日志来恢复数据。 事务支持

传统的观念认为NoSQL不支持或者只有部分支持事务,在MongoDB 4.0之前对事务的支持有限,但在MongoDB 4.0 引入了事务功能,支持多文档ACID特性。

事务实现原理:snapshot(事务快照) 、MVCC (多版本并发控制) 和redo log来实现事务。 MongoDB集群 副本集
Primary 主节点,一个副本集有且仅有一台服务器处于Primary状态,只有主节点才对外提供写服务。如果主节点挂掉,副本集将投票选出一个备节点成为新的主节点。 Secondary 备用节点,副本集允许有多台Secondary,每个备用节点的数据与主节点的数据是完全同步的。备节点可以提供读服务。 Arbiter 仲裁节点,该类节点可以不用单独存在,如果配置为仲裁节点,就主要负责在复本集中监控其他节点状态,投票选出主节点。如果没有仲裁节点,那么投票工作将由所有节点共同进行。 官方推荐MongoDB副本节点在3~11个之间,奇数个副本节点。限制副本节点的数目是为了减少复制的成本,限制为奇数则是为了减少出现脑裂。 副本集的选举
跟很多NoSQL数据库一样,MongoDB副本集采用的是Bully算法进行主节点选举。
在以下场景副本集会开始进行选举: 初始化副本集时; 备份节点无法和主节点通讯时(可能主节点宕机或网络原因); Primary 手动降级。 选举的大致原理是获取每个服务器节点的最后操作时间戳(oplog),选择最后操作时间戳最新(保证数据最新)的服务器节点作为主节点。 分片
当MongoDB存储海量的数据时,一台机器不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

分片集群由Shard、Mongos和Config server 3个组件构成。 mongos:数据库集群请求的入口,起到路由作用,它负责把对应的数据请求转发到对应的shard服务器上。生产环境中需要多个mongos。 config server:保存集群和分片的元数据,mongos启动时会加载配置服务器上的配置信息,以后如果配置服务器信息变化会通知到所有的mongos更新自己的状态。生产环境需要多个配置服务器并定期备份。 shard server:实际存储数据的分片。生产环境为了保证高可用,每个Shard都要求是副本集。

分片策略
分片支持单个集合的数据分散在多个分片上,目前主要有范围分片和hash分片两种数据分片策略。
范围分片适合满足在一定范围内的查找,缺点是可能会导致数据分布不均,有热点数据;hash分片分布均匀,但是不能高效进行范围查询。

应用场景

应用不需要事务和复杂join支持 新应用,需求会变,数据模型无法确认,想快速迭代开发 应用需要2000-3000以上的读写QPS(更高也可以) 应用需要TB甚至PB级别数据存储 应用发展迅速,需要能快速水平扩展 应用需要大量的地理位置查询、文本查询 应用需要存储的数据不丢失

参考资料

  • [MongoDB介绍]
  • [MongoDB 介绍与应用详解]

赏 谢谢你请我吃糖果 ![] 支付宝 ![] 微信

文章列表

更多推荐

更多
  • Azure数据工程指南-二十四、数据治理的权限 创建 azure 预览帐户,探索 azure 预览,探索词汇表,浏览资产,以编程方式使用预览,摘要,管理凭证和访问,创建扫描, 许多组织需要建立数据治理流程、标准和方法,并且已经能够使用内部 SQL Server 工具(如 Master
    Apache CN

  • Azure数据工程指南-二十二、Synapse 分析工作区 创建 Synapse 分析工作区,使用 Spark 探索样本数据,用 SQL 查询数据,用 SQL 创建外部表,摘要, 微软 Azure 数据平台的众多新增功能已经围绕许多类似的产品及其在现代 Azure 数据平台中的用途产生了兴奋和困
    Apache CN

  • Azure数据工程指南-二十三、数据块中的机器学习 创建 MLflow 实验,安装 MLflow 库,创建笔记本,选择性测井,自动记录,摘要, 寻求利用机器学习(ML)和人工智能能力的组织和开发人员花费大量时间构建 ML 模型,并寻求一种方法来简化他们的机器学习开发生命周期,以跟踪实验,
    Apache CN

  • Azure数据工程指南-二十一、将 Apache Spark 的 GraphFrame API 用于图形分析 安装 JAR 库,加载新数据表,将数据加载到数据块笔记本中,用顶点和边构建一个图,查询图表,寻找有图案的图案,用 PageRank 发现重要性,探索入度和出度度量,摘要,进行广度优先搜索,查找连接的组件, 图形技术使用户能够以图形的形式
    Apache CN

  • Azure数据工程指南-20 二十、部署 SQL 数据库先决条件,创建 Visual Studio SQL 数据库项目,安装 Visual Studio GitHub 扩展,导入 AdventureWorks 数据库,连接到 GitHub Repo 源代码控制,将
    Apache CN

  • Azure数据工程指南-十九、部署数据工厂更改 先决条件,创建 DevOps 持续集成构建管道,创建 DevOps 持续部署发布渠道,验证部署的数据工厂资源,摘要,Azure PowerShell 任务停止触发器,ARM 模板部署任务,Azure PowerShell 任务启动触发器
    Apache CN

  • Azure数据工程指南-十八、用于 Cosmos DB 的 Azure Synapse 链接 创建一个 Azure Cosmos DB 帐户,启用 Azure Synapse 链接,创建一个 Cosmos DB 容器和数据库,将数据导入 Azure Cosmos DB,在 Azure Synapse Analytics 中创建
    Apache CN

  • Azure数据工程指南-十六、流分析异常检测 先决条件,创建流分析输入和输出,创建实时电源 BI 仪表板,监控实时电源 BI 流,摘要,创建 Azure 流分析作业,创建物联网中心,创建 Power BI 服务,下载设备模拟器,添加流输入,添加流输出,编写流分析查询,启动流分析作业
    Apache CN

  • Azure数据工程指南-十七、使用 Apache Spark 的实时物联网分析 先决条件,创建物联网中心,创建数据块集群,安装 Maven 库,创建笔记本并运行结构化流查询,摘要,配置笔记本连接,开始结构化流,启动物联网设备模拟器,显示实时流数据,创建 Spark SQL 表,将流写入增量表, 实时物联网分析、高级
    Apache CN

  • Azure数据工程指南-十五、DeltaLake 为什么是酸性 DeltaLake,先决条件,创建并插入 DeltaLake,更新 DeltaLake,从 DeltaLake 删除,浏览增量日志,摘要,插入,更新,删除, 在使用 Azure Data Lake Storage Gen2
    Apache CN

  • 近期文章

    更多
    文章目录

      推荐作者

      更多