MongoDB和RocksDB数据库简介

一、MongoDB简介

  MongoDB是一款由C++语言编写,基于分布式文件存储的NoSQL数据库,具有免费、操作简单、面向文档存储、自动分片、可扩展性高、查询功能强大等特点,旨在为Web应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数据结构由键值对(key-value)组成,MongoDB的文档类似于JSON对象。

1、MongoDB的特点

(1)文档结构的存储方式,能够更便捷的获取数据

  使用JSON风格语法,易于掌握和理解:MongoDB使用JSON的变种BSON作为内部存储的格式和语法。针对MongoDB的操作都使用JSON风格语法,客户端提交或接收的数据都使用JSON形式来展现。相对于SQL来说,更加直观,容易理解和掌握。并且支持嵌入子文档。
在这里插入图片描述

(2)内置GridFS,支持大容量的存储

  GridFS是一个出色的分布式文件系统,可以支持海量的数据存储,可用于存储和检索大文件,如图片,音频文件,视频文件等。内置了GridFS了MongoDB,能够满足对大数据集的快速范围查询。

(3)通过副本集保证高可用性

  应用服务器,连接到MongoDB的整个副本集,副本集中有一台主服务器负责整个副本集的读写,副本节点定期同步主节点的数据和oplog,以保证数据的一致性。一旦主节点宕机或挂掉,副本节点会通过心跳机制检测到,并根据事先副本集创建时设置的节点优先级进行主节点的重新选举,从而保证高可用
在这里插入图片描述

(4)可扩展性强,支持多数据存储引擎

  MongoDB支持多数据存储引擎(WiredTiger,MMAPv1, In-Memory),其中WiredTiger为MongoDB默认的存储引擎。所谓的多数据储存引擎形象的说就是拔插式引擎,用当前的引擎替换掉前面的引擎就可以使用了,简单方便快捷。MongoDB提供整个数据库集群的管理工作,而真正将数据持久化的则是数据存储引擎
在这里插入图片描述

二、RocksDB简介

  RocksDB是针对KV数据存储的高性能嵌入式数据库,内核数据结构是基于LSM树实现的,它的特点是支持高效的点查找以及范围扫描支持高速写入等。RocksDB可以作为MongoDB的底层数据存储引擎,适合大量的写操作场景
在这里插入图片描述

1、LSM树简介

  传统关系型数据库使用btree或一些变体作为存储结构,能高效进行查找。但保存在磁盘中时它也有一个明显的缺陷,那就是逻辑上相离很近但物理却可能相隔很远,这就可能造成大量的磁盘随机读写。LSM树能让我们进行顺序写磁盘,从而大幅提升写操作,作为代价的是牺牲一些读性能。

  LSM树由两个或以上的存储结构组成,比如在论文中为了方便说明使用了最简单的两个存储结构。一个存储结构常驻内存中,称为C0 tree,具体可以是任何方便KV查找的数据结构,比如红黑树、map之类,甚至可以是跳表。另外一个存储结构常驻在硬盘中,称为C1 tree,具体结构类似B树。C1所有节点都是100%满的,节点的大小为磁盘块大小。

在这里插入图片描述

2、LSM树的插入步骤

  大体思路是:插入一条新纪录时,首先在日志文件中插入操作日志,以便后面恢复使用,日志是以append形式插入,所以速度非常快;将新纪录的索引插入到C0中,这里在内存中完成,不涉及磁盘IO操作;当C0大小达到某一阈值时或者每隔一段时间,将C0中记录滚动合并到磁盘C1中
在这里插入图片描述

3、LSM树的合并步骤

  合并过程中会使用两个块:emptying block和filling block。

  • 从C1中读取未合并叶子节点,放置内存中的emptying block中。
    在这里插入图片描述

  • 以升序找C0中的节点,与emptying block进行合并排序,合并结果保存到filling block中,并将C0对应的节点删除。
    在这里插入图片描述

  • 不断执行第2步操作,合并排序结果不断填入filling block中,当其满了则将其追加到磁盘的新位置上,注意是追加而不是改变原来的节点。合并期间如果emptying block使用完了则再从C1中读取未合并的叶子节点。
    在这里插入图片描述

  • C0和C1所有叶子节点都按以上合并完成后即完成一次合并。
    在这里插入图片描述

参考:https://baijiahao.baidu.com/s?id=1613810327967900833&wfr=spider&for=pc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值