Bitcask 介绍

Bitcask 是一种高性能的键值存储引擎,基于日志结构和哈希索引来提供高速的读写操作和数据持久性,适用于处理大量写入请求和快速查找键值对的应用场景。

核心概念

Bitcask 的设计与 LSM 相似,都是将数据追加到不可变的日志文件内,然后在内存中构建索引,将查询信息映射到日志条目所在数据文件的偏移量,从而加速查询。

写操作

Bitcask 的写入删除和更新都是已创建新 KV 的方式,这意味着 更新和删除操作 并不会直接删除旧的数据文件,而是通过修改内存的索引信息,达到的软删除的结果。

因为删除和更新都不会修改旧数据文件,所以 Bitcask 需要在对数据进行 compaction 时,将这些无效数据给移出,构建新的数据文件,同时还得更新内存中的索引信息,重新提交新的元信息。这个过程得保证原子性。

快速恢复

Bitcask 还考虑如何在程序崩溃后快速恢复。如果不做优化,程序 crash 后需要重新扫描所有的数据文件来构建索引信息。Bitcask 通过给每一个数据文件额外创建一个 hint 文件,这个文件内主要是有数据的元信息,程序读取 hint 文件即可完成内存索引的构造,加速了启动过程。

缺点

Bitcask 的缺点也是显而易见,需要在内存中构建所有文件的索引,这需要足够大的内存空间来完成。我们可以通过对数据进行分片进行分布式存储来解决这一问题。

参考资料

具体学习可参考以下文章:

Bitcask — 日志结构的快速 KV 存储引擎的更多相关文章

  1. 基于淘宝开源Tair分布式KV存储引擎的整合部署

    一.前言 Tair支撑了淘宝几乎所有系统的缓存信息(Tair = Taobao Pair,Pair即Key-Value键值对),内置了三个存储引擎:mdb(默认,类似于Memcache).rdb(类似 ...

  2. levelDB, TokuDB, BDB等kv存储引擎性能对比——wiredtree, wiredLSM,LMDB读写很强啊

    在:http://www.lmdb.tech/bench/inmem/ 2. Small Data Set Using the laptop we generate a database with 2 ...

  3. 为什么选择b+树作为存储引擎索引结构

    为什么选择b+树作为存储引擎索引结构 在数据库或者存储的世界里,存储引擎的角色一直处于核心位置.往简单了说,存储引擎主要负责数据如何读写.往复杂了说,怎么快速.高效的完成数据的读写,一直是存储引擎要解 ...

  4. [MySQL Reference Manual]15. 其他存储引擎

    15. 其他存储引擎 15. 其他存储引擎 15.1 设置存储引擎 15.2 MyISAM存储引擎 15.2.1 MyISAM启动选项 15.2.2 Key的空间要求 15.2.3 MyISAM表存储 ...

  5. MySQL存储引擎差异化实验

    本篇把MySQL最常用的存储引擎给大家做一个介绍,然后通过插入.修改和并发实验来了解和验证一下它们之间的一些差异. 一.MySQL存储引擎简介 存储引擎在MySQL结构里占据核心的位置,是上层抽象接口 ...

  6. 《MySQL技术内幕:InnoDB存储引擎(第2版)》书摘

    MySQL技术内幕:InnoDB存储引擎(第2版) 姜承尧 第1章 MySQL体系结构和存储引擎 >> 在上述例子中使用了mysqld_safe命令来启动数据库,当然启动MySQL实例的方 ...

  7. MySQL——存储引擎

    核心知识点 1.InnoDB:数据和索引存放在单独的文件,聚簇索引,行级锁,事务,MVCC 2.MyISAM: (1)缺点:不支持事务和表级锁,因为不支持表锁,锁颗粒比较大,因此适合只读和小文件. ( ...

  8. 二十二、mysql 执行计划与存储引擎

    1.explain(执行计划)中涉及的各字段理解1.1) select_type列的取值及含义:    SIMPLE                 :简单的SELECT语句(不包括UNION操作或子 ...

  9. mysql innodb存储引擎介绍

    innodb存储引擎1.存储:数据目录.有配置参数为“ innodb_data_home_dir ” .“ innodb_data_file_path ” 和 “innodb_log_group_ho ...

  10. MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析

    文/何登成 导读:   来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解I ...

随机推荐

  1. HCIP-ICT实战进阶04-ISIS原理与配置

    HCIP-ICT实战进阶04-ISIS原理与配置 0 前言 IS-IS(Intermediate System to Intermediate System, 中间系统到中间系统)协议, 和OSPF一 ...

  2. 实时平台-Flink篇

    Flink任务统一通过实时平台统一管理的好处不用多说,这里简单介绍下实时平台-Flink模块的功能以及实现. 主要分为两大块 一.任务管理 任务管理主要包括任务的提交.暂停.下线.重启.历史版本回滚. ...

  3. WebService接口实际场景应用(一)

    背景:要求写一套接口测试工具.过程中遇到了WebService接口的问题,遂写下本篇文章. 阶段问题1: 需要利用数据驱动,然后读取excel中的数据并直接调用.但是webService接口与http ...

  4. Day12-面向对象初识

    面向对象编程 Java的核心思想就是OOP 一.面向过程&面向对象 面向过程思想: 步骤清晰简单,第一步做什么,第二步做什么...... 面对过程适合处理一些较为简单的问题 面向对象思想: 物 ...

  5. 微软开源 Python 自动化神器 Playwright

    背景 逛博客时候突然看到 Playwright web自动化,感觉很有意思,就翻看了很多博客,简单记录一下. 简介 Playwright是一个强大的Python库,仅用一个API即可自动执行Chrom ...

  6. PHP Redis - Hash (哈希)

    Redis hash 是一个string类型的field和value的映射表,特别适合用于存储对象. Redis 中每个 hash 可以存储  232-1(4294967295) 键值对 赋值(hse ...

  7. MyBatis-Plus数据源失效找不到

    记一次项目排查问题项目应用了MyBatis-Plus多数据源配置但是在执行定时任务时发现没达到想要的结果于是查询日志分析问题最终发现问题所在多数据源注解会合事务注解冲突导致失效@DS("&q ...

  8. mac 安装 nginx 流程,并解决前端跨域问题

    mac 安装 nginx 流程 首先mac安装brew包管理工具: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN ...

  9. C 语言 scanf 格式化输入函数

    C 语言 scanf 格式化输入函数 函数概要 scanf 函数从标准输入流中读取格式化字符串.与 printf 格式化输出函数相反,scanf 函数是格式化输入函数. 函数原型 #include & ...

  10. UI自动化之【报错记录-selenium】

    1.找不到元素 写脚本的过程中时不时就会报这种错,一般路径定位不到直接复制xpath基本就能找到了,也有时候是因为有iframe或是句柄不对 原因: ①没有加等待时间,脚本运行到那步时,页面还没加载完 ...