当前位置: 首页 > news >正文

RocksDB简介

一、RocksDB是什么

  • 常见的数据库如 Redis Mysql Mongo 可以单独提供网络服务
  • RocksDB提供存储服务,是一个嵌入式KV存储引擎
    • Rocksdb没有server code,用户需要自己实现server的部分来得到c-s架构的数据库。

二、RocksDB的诞生

  • 基于flash存储和ssd普及,网络latency在query workload latency中占据的比例越来越高。嵌入式数据库变得受欢迎。
  • dhruba尝试比较HBase/HDFS和mysql在query serving workload上的表现。经过多次优化后,在机械硬盘上,几pb的数据集下,hbase可以达到比Mysql慢两倍的查询速度。dhruba开始试图扩展hdfs/hbase的能力,使其能serve query workload。但是随着flash的普及,他发现hdfs对flash的使用效率不高。并且将hdfs/hbase改成嵌入式的难度太高,因此他决定开发新的数据库存储引擎。在这里插入图片描述3. 当时已有嵌入式数据库,leveldb是其中的佼佼者在这里插入图片描述
  • leveldb存在的问题
    1. 单线程compaction + flush,这导致写入速度不够快,并且还有stall的问题,latency p99太高。
    2. leveldb不能用到flash的所有IO能力。
      RocksDB基于LevelDB开发:

三、RocksDB的“社会关系”

  • RocksDB 是 facebook 基于 LevelDB 研发的一个嵌入式KV存储引擎,以C++ Library的形式提供使用(目前也已经支持Java)。
  • 分布式领域的三驾马车:
    • GFS 分布式文件系统
    • BigTable 分布式KV存储
    • MapReduce 基于分布式文件系统、分布式KV存储的大数据处理 在这里插入图片描述 - 两种使用方式:
      • 直接作为单机版KV数据库引擎使用: Flink采用RocksDBStateBackend来存储状态
      • 作为数据存储系统引擎使用: 在其上面实现分片和多副本,从而实现一个真正的分布式存储系统,以Rocksdb作为其某个副本的存储介质,上层通过Paxos或者Raft协议来保证副本之间的数据一致性。

四、RocksDB基本原理

4.1 整体架构

RocksDB是一个lsm-tree style的数据库在这里插入图片描述

4.2 LSM Tree

4.2.1 核心思想

内存顺序IO >> 内存随机IO ≈ 磁盘顺序IO >> 磁盘随机IO

4.2.2 对比: B+ 树

B+树是一个常用的存储结构,很多开源数据库都是基于B+树。在这里插入图片描述1. 主要优点:

  • 结构比较扁平,高度低(一般不超过4层),随机寻道次数少;
  • 数据存储密度大,且都位于叶子节点,查询稳定,遍历方便;
  • 叶子节点形成有序链表,范围查询转化为顺序读,效率高。相对而言B树必须通过中序遍历才能支持范围查询。
  1. 主要缺点:
  • 如果写入的数据比较离散,那么寻找写入位置时,子节点有很大可能性不会在内存中&#x
http://www.lryc.cn/news/432898.html

相关文章:

  • [VC] Visual Studio中读写权限冲突
  • ChatGPT3.5/4.0新手使用手册,国内中文版使用教程
  • 基于MicroPython的ESP8266与超声波传感器设计方案
  • 仿华为车机UI--图标从Workspace拖动到Hotseat同时保留图标在原来位置
  • C++ 中的 override 和 overload的区别
  • spring boot3框架@Validated失效
  • UE5引擎工具链知识点
  • Python的图像算术与逻辑运算详解
  • WSL 下的 CentOS 装 Docker
  • v0.dev快速开发
  • python之字符串
  • 算法打卡 Day28(回溯算法)-组合总数 + 组合总数 Ⅱ+ 电话号码的字母组合
  • 【Hadoop|MapReduce篇】MapReduce概述
  • 设置Virtualbox虚拟机共享文件夹
  • 从零开始的机器学习之旅
  • 开源还是封闭?人工智能的两难选择
  • Prometheus 服务监控
  • 建模杂谈系列252 规则的串行改并行
  • 0.ffmpeg面向对象oopc
  • KDD2024参会笔记-Day1
  • Java操作Elasticsearch的实用指南
  • 数据库系统 第42节 数据库索引简介
  • C++11 --- 智能指针
  • C#顺序万年历自写的求余函数与周位移算法
  • 【Java并发编程一】八千字详解多线程
  • CentOS 8FTP服务器
  • C++ | Leetcode C++题解之第385题迷你语法分析器
  • 【软件设计师真题】第一大题---数据流图设计
  • 系统架构的发展历程之模块化与组件化
  • 基因组学中的深度学习