返回顶部
首页 > 资讯 > 数据库 >Bitcask模型是什么
  • 429
分享到

Bitcask模型是什么

2024-04-02 19:04:59 429人浏览 八月长安
摘要

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

今天就跟大家聊聊有关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模型是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网数据库频道,感谢大家的支持。

您可能感兴趣的文档:

--结束END--

本文标题: Bitcask模型是什么

本文链接: https://lsjlt.com/news/67947.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Bitcask模型是什么
    今天就跟大家聊聊有关Bitcask模型是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  Bitcask是一个日志型的基于hash表结构和key...
    99+
    2024-04-02
  • RBAC模型是什么
    这篇文章将为大家详细讲解有关RBAC模型是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。RBAC模型是权限设计中经典的模型。完整名称是Role-Based Access Control,基于角色的访问...
    99+
    2023-06-26
  • 什么是JVM内存模型?
    本篇文章带大家初步了解一下JVM内存模型,有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。计算机内存模型在程序运行时,CPU通过访问主存获取数据,但随着CPU的快速发展,CPU访问速度越来越高,硬件无法满足CPU的条件下,大...
    99+
    2016-08-29
    java教程 java JVM
  • 什么是Prototype原型模式
    本篇内容介绍了“什么是Prototype原型模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言在设计模...
    99+
    2024-04-02
  • html的盒模型是什么
    html的盒模型是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。   1.1.盒的内容区的尺寸contentwidth和...
    99+
    2024-04-02
  • css布局模型是什么
    小编给大家分享一下css布局模型是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   流动模型(flow)   默认的网...
    99+
    2024-04-02
  • CSS中框模型是什么
    小编给大家分享一下CSS中框模型是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! CSS 框模型概述 元素框的最内一小部...
    99+
    2024-04-02
  • IE盒子模型是什么
    这篇文章主要介绍“IE盒子模型是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“IE盒子模型是什么”文章能帮助大家解决问题。 IE盒子模型如下图: 图中的内层...
    99+
    2024-04-02
  • 什么是css盒子模型
    这篇文章主要介绍“什么是css盒子模型”,在日常操作中,相信很多人在什么是css盒子模型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是css盒子模型”的疑惑有所帮助!接...
    99+
    2024-04-02
  • Hibernate动态模型是什么
    这篇文章主要介绍“Hibernate动态模型是什么”,在日常操作中,相信很多人在Hibernate动态模型是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate动态模型是什么”的疑惑有所帮助!...
    99+
    2023-06-17
  • Java8内存模型是什么
    这篇文章主要介绍了Java8内存模型是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、JVM 内存模型根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计...
    99+
    2023-06-19
  • JMM内存模型是什么
    这篇文章主要介绍“JMM内存模型是什么”,在日常操作中,相信很多人在JMM内存模型是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JMM内存模型是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!JM...
    99+
    2023-06-27
  • golang内存模型是什么
    Golang的内存模型是一种并发内存模型,它定义了在不同Goroutine之间共享数据的行为。在Golang的内存模型中,每个Gor...
    99+
    2023-10-20
    golang
  • Redis线程模型是什么
    这篇文章主要讲解了“Redis线程模型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis线程模型是什么”吧! Redis它是一个单线程的,这一点需要去注意的。首先我们呢会有一个客...
    99+
    2023-06-30
  • CSS 盒子模型是什么
    本文将为大家详细介绍“CSS 盒子模型是什么”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“CSS 盒子模型是什么”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获新知识吧。网页设...
    99+
    2023-06-08
  • Redis的内存模型是什么
    Redis的内存模型是什么?针对这个问题,这篇文章给出了相对应的分析和解答,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。redis有五种对象类型:字符串、哈希、列表、集合、有序集合,丰富的类型...
    99+
    2024-04-02
  • CSS+DIV盒子模型是什么
    今天小编给大家分享一下CSS+DIV盒子模型是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2024-04-02
  • CSS中布局模型是什么
    这篇文章给大家分享的是有关CSS中布局模型是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。CSS 包含 3 种基本的布局模型,用英文概括为:Flow、Layer 和 Floa...
    99+
    2024-04-02
  • Css中盒子模型是什么
    这篇文章主要介绍了Css中盒子模型是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。网页设计中常用的属性名:内容(content)、填充(...
    99+
    2024-04-02
  • css中什么是盒子模型
    这篇文章主要为大家展示了“css中什么是盒子模型”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css中什么是盒子模型”这篇文章吧。什么是盒子模型CSS框模型(B...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作