我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Bitcask模型是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Bitcask模型是什么

今天就跟大家聊聊有关Bitcask模型是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

  Bitcask是一个日志型的基于hash表结构和key-value存储模型,但是其简洁有效的设计。下面亿速云小编来讲解下Bitcask模型是什么?

  Bitcask模型是什么

  1.日志型的数据文件

  何谓日志型?就是appendonly,所有写操作只追加而不修改老的数据,就像我们的各种服务器日志一样。在Bitcask模型中,数据文件以日志型只增不减的写入文件,而文件有一定的大小限制,当文件大小增加到相应的限制时,就会产生一个新的文件,老的文件将只读不写。在任意时间点,只有一个文件是可写的,在Bitcask模型中称其为activedatafile,而其他的已经达到限制大小的文件,称为olderdatafile,如下图:

  文件中的数据结构非常简单,是一条一条的数据写入操作,每一条数据的结构如下:

  上面数据项分别为key,value,key的大小,value的大小,时间戳(应该是),以及对前面几项做的crc校验值。(数据删除操作也不会删除旧的条目,而是将value设定为一个特殊的值以作标示)

  数据文件中就是连续一条条上面格式的数据,如下图:

  好了,上面是日志型的数据文件,如果数据文件这样持续的存下去,肯定是会无限膨胀的,为了解决个问题,和其他日志型存储系统一样Bitcask也有一个定期的merge操作。

  merge操作,即定期将所有olderdatafile中的数据扫描一遍并生成新的datafile(没有包括activedatafile是因为它还在不停写入),这里的merge其实就是将对同一个key的多个操作以只保留最新一个的原则进行删除。每次merge后,新生成的数据文件就不再有冗余数据了。

  Bitcask模型是什么

  2.基于hash表的索引数据

  上面讲到的是数据文件,日志类型的数据文件会让我们的写入操作非常快(日志型的优势之一是将磁盘当作磁带,进行顺序读写的效率非常高,可以参见这里),而如果在这样的日志型数据上进行key值查找,那将是一件非常低效的事情。于是我们需要使用一些方法来提高查找效率。

  例如在Bigtable中,使用bloom-filter算法为每一个数据文件维护一个bloom-filter的数据块,以此来判定一个值是否在某一个数据文件中。

  而在Bitcask模型中,我们使用了另一种方法,使用了一个基于hash表的索引数据结构。

  在Bitcask模型中,除了存储在磁盘上的数据文件,还有另外一块数据,那就是存储在内存中的hash表,hash表的作用是通过key值快速的定位到value的位置。hash表的结构大致如下图所示:

  hash表对应的这个结构中包括了三个用于定位数据value的信息,分别是文件id号(file_id),value值在文件中的位置(value_pos),value值的大小(value_sz),于是我们通过读取file_id对应文件的value_pos开始的value_sz个字节,就得到了我们需要的value值。整个过程如下图所示:

  由于多了一个hash表的存在,我们的写操作就需要多更新一块内容,即这个hash表的对应关系。于是一个写操作就需要进行一次顺序的磁盘写入和一次内存操作。

  3.有用的hintfile

  至此,Bitcask模型基本上已经讲述完成,而这一节讲到的hintfile,则是一个有用的技巧,本人认为并不一定是Bitcask模型的必须特性。

  从上面我们可以知道,我们称其为索引的hash表,是存储在内存中的,虽然在各自的实现中可以做一些持久化的保证,但是Bitcask模型中并不对在断电或重启后的hash表数据不丢失做出保证。

  因此,如果我们不做额外的工作,那么我们启动时重建hash表时,就需要整个扫描一遍我们的数据文件,如果数据文件很大,这将是一个非常耗时的过程。因此Bitcask模型中包含了一个称作hintfile的部分,目的在于提高重建hash表的速度。

  我们上面讲到在olddatafile进行merge操作时,会产生新的datafile,而Bitcask模型实际还鼓励生成一个hintfile,这个hintfile中每一项的数据结构,与datafile中的数据结构非常相似,不同的是他并不存储具体的value值,而是存储value的位置(像在hash表中的一样),其结构如下图:

  这样,在重建hash表时,就不需要再扫描所有datafile文件,而仅仅需要将hintfile中的数据一行行读取并重建即可。大大提高了利用数据文件重启数据库的速度。

看完上述内容,你们对Bitcask模型是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Bitcask模型是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

RBAC模型是什么

这篇文章将为大家详细讲解有关RBAC模型是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。RBAC模型是权限设计中经典的模型。完整名称是Role-Based Access Control,基于角色的访问
2023-06-26

关系模型是什么?

关系模型是一种基于表的的数据模型。它使用行(实体)和列(属性)组织数据,并通过关系、属性、键和完整性规则维护数据完整性和一致性。该模型因其数据完整性、数据独立性、灵活性、标准化和广泛适用性而备受推崇,适用于商业智能、事务处理和数据挖掘等领域。然而,对于大数据集,它可能会表现出性能瓶颈,并且对于复杂模式或快速扩展的需求,可能需要替代模型。
关系模型是什么?
2024-04-02

什么是扩散模型?

扩散模型是一种生成模型,通过逐级添加和去除噪声,将数据点转换到一种预定义的潜在分布,可以生成类似训练数据集的新样本。其优点包括高保真生成、可控生成和可解释性。广泛应用于图像、音频、文本生成等领域,变体包括DDPM、GLIDE和DiscoDiffusion。在实际应用中,扩散模型影响着生成艺术、增强现实、药物发现、个性化推荐和科学研究等领域。
什么是扩散模型?
2024-04-02

什么是JVM内存模型?

本篇文章带大家初步了解一下JVM内存模型,有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。计算机内存模型在程序运行时,CPU通过访问主存获取数据,但随着CPU的快速发展,CPU访问速度越来越高,硬件无法满足CPU的条件下,大多内存加入了高速缓存
什么是JVM内存模型?
2016-08-29

CSS 盒子模型是什么

本文将为大家详细介绍“CSS 盒子模型是什么”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“CSS 盒子模型是什么”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获新知识吧。网页设
2023-06-08

Redis线程模型是什么

这篇文章主要讲解了“Redis线程模型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis线程模型是什么”吧! Redis它是一个单线程的,这一点需要去注意的。首先我们呢会有一个客
2023-06-30

Java8内存模型是什么

这篇文章主要介绍了Java8内存模型是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、JVM 内存模型根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计
2023-06-19

JMM内存模型是什么

这篇文章主要介绍“JMM内存模型是什么”,在日常操作中,相信很多人在JMM内存模型是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JMM内存模型是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!JM
2023-06-27

Hibernate动态模型是什么

这篇文章主要介绍“Hibernate动态模型是什么”,在日常操作中,相信很多人在Hibernate动态模型是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate动态模型是什么”的疑惑有所帮助!
2023-06-17

golang内存模型是什么

Golang的内存模型是一种并发内存模型,它定义了在不同Goroutine之间共享数据的行为。在Golang的内存模型中,每个Goroutine都拥有自己的栈,用于存储局部变量和函数调用信息。并且,每个Goroutine可以访问共享的堆内存
2023-10-20

ASP.NET AJAX编制模型是什么

这篇文章主要介绍“ASP.NET AJAX编制模型是什么”,在日常操作中,相信很多人在ASP.NET AJAX编制模型是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP.NET AJAX编制模型是什么
2023-06-17

数据交换模型是什么

本文小编为大家详细介绍“数据交换模型是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“数据交换模型是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。数据交换模型使得不同应用程序之间的数据交换成为可能。这里是
2023-06-27

编程热搜

目录