Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从零实现 KV 和分布式 KV 有什么区别?

从零实现 KV 和分布式 KV 有什么区别?

作者头像
roseduan
发布于 2023-11-17 08:26:51
发布于 2023-11-17 08:26:51
4930
举报

在众望所归之下,前两天终于出了一个全新的课程《从零实现分布式 KV》,大家的学习热情都非常高涨,其中有很多同学都问到了一个共同的问题,那就是这个课程和我之前的《从零实现 KV 存储》有什么区别呢?

这一次就专门给大家解释一下。

其实说起来也比较简单,《从零实现 KV 存储》实现的是一个单机 KV 存储引擎,何为单机?一般指的是在一个 server 上的单个进程里运行的数据库,其主要解决的问题是数据如何存储到持久化存储介质中,比如最常见的磁盘。

所以我们会设计存储到磁盘上的数据会怎么进行组织,磁盘上的文件格式是什么样的,然后会考虑怎么才能够更加高效的从磁盘读取数据,减少磁盘 IO 次数。所以单机存储引擎更加专注于数据存储到磁盘的具体实现方法,并且要尽量保证数据不丢失。

常见的单机 KV 存储模型有 B+ 树、LSM 树、Bitcask,使用这些模型实现的单机 KV 引擎有 LevelDB、RocksDB、BoltDB、Badger、Pebble、RoseDB 等等。

那么《从零实现分布式 KV》 课程又实现的什么呢?

分布式 KV,其重点在于分布式。前面说到了,单机 KV 是在一个 server 上运行的,如果这个 server 出现了故障,或者磁盘损坏了导致了数据丢失等情况,那么这个数据库一是不能够响应用户的请求,二是存储在其中的数据有可能损坏,并且如果我们没有备份的话,数据就永远丢失了,会造成比较严重的后果。

所以分布式就能够比较好的解决这个问题,利用最朴素的思想,不要把鸡蛋放在同一个篮子里。既然数据存储在一个 server 上有非常大的问题,那么我们将数据拷贝出来,存储到不同的 server 上不就好了?

这样每个 server 上的一份数据一般叫做一个副本(Replica),如果一个 server 出现了故障,还有其他的数据副本可以继续使用。

但是数据有了多个副本之后,随之而来又带来了新的问题,那就是写数据的时候,应该写到哪个副本里面?还是全部的副本都写一遍?读数据的时候,应该从哪个副本去读?如果副本之间的数据不一致了怎么办?

等等,这些问题抽象出了一个新的概念,那就是共识,即让多个副本之间协调一致,统一对外提供服务,并且保证数据的完整一致性,我们需要一些手段来让多个副本之间达成共识,这一般称之为共识算法,常见的有 Paxos 和 Raft,而我们课程中实现的是 Raft 算法。

有了共识算法之后,我们可以在这个基础之上构建分布式、高可用的系统,而课程中实现的是最常见的分布式 KV 系统,每个 server 之上,都会使用 Raft 共识算法来保证多个副本之间的一致性,然后每个 server 本地都会维护一个存储数据的单机 KV,这个单机 KV 一般叫做状态机。

常见的分布式 KV 系统有 TiKV、ETCD、FoundationDB 等等。

所以现在大家应该就清楚了,分布式 KV 重点在于分布式算法,以及分布式系统的设计与实现,并且只是用到了单机 KV 来存储本地数据,而存储数据、磁盘数据组织的具体逻辑,是交给了单机 KV 去负责。

这两个课程的学习有先后顺序吗?

这也是问的比较多的问题,实际上并没有先后顺序,所以先学哪个都是可以的,也都能够学懂,彼此都是独立的内容。

最后,感谢大家的支持,希望这个课程能够对大家有所帮助,附上课程链接,想要购买者可查看:

《从零实现 KV 存储》

https://w02agegxg3.feishu.cn/docx/Ktp3dBGl9oHdbOxbjUWcGdSnn3g

《从零实现分布式 KV》

https://av6huf2e1k.feishu.cn/docx/JCssdlgF4oRADcxxLqncPpRCn5b

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 roseduan写字的地方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
raft 算法、分布式 KV 面试汇总
基于 MIT 6824 课程 lab 框架,实现一个基于 raft 共识算法、高性能、可容错的分布式 KV 存储系统,保证系统的一致性和可靠性。
roseduan
2024/02/29
1.1K0
raft 算法、分布式 KV 面试汇总
硬核项目 KV 存储,轻松拿捏面试官!
基于 Bitcask 模型,兼容 Redis 数据结构和协议的高性能 KV 存储引擎 设计细节
roseduan
2023/09/01
1K0
硬核项目 KV 存储,轻松拿捏面试官!
实现分布式 kv—1 Standalone KV
TinyKV 是 PingCAP 的一个开源课程:https://github.com/tidb-incubator/tinykv。
roseduan
2021/11/30
9480
使用 WAL 构建你自己的 KV 存储
这篇文章将主要描述,如何使用我最近新开发的 WAL(Write Ahead Log)构建属于你自己的 KV 存储引擎。
roseduan
2023/09/01
3880
使用 WAL 构建你自己的 KV 存储
浅谈 Raft 分布式一致性协议|图解 Raft
本篇文章将模拟一个KV数据读写服务,从提供单一节点读写服务,到结合分布式一致性协议(Raft)后,逐步扩展为一个分布式的,满足一致性读写需求的读写服务的过程。
白泽z
2022/12/20
7680
浅谈 Raft 分布式一致性协议|图解 Raft
使用开源技术构建有赞分布式 KV 存储服务
在有赞早期的时候,当时只有 MySQL 做存储,codis 做缓存,随着业务发展,某些业务数据用 MySQL 不太合适, 而 codis 由于当缓存用, 并不适合做存储系统, 因此, 急需一款高性能的 NoSQL 产品做补充。考虑到当时运维和开发人员都非常少, 我们需要一个能快速投入使用, 又不需要太多维护工作的开源产品。 当时对比了几个开源产品, 最终选择了 aerospike 作为我们的 KV 存储方案。 事实证明, aerospike 作为一个成熟的商业化的开源产品承载了一个非常好的过渡时期 在很少量的开发和运维工作支持下, 一直稳定运行没有什么故障, 期间满足了很多的业务需求, 也因此能抽出时间投入更多精力解决其他的中间件问题。
用户1278550
2019/07/01
1.6K0
使用开源技术构建有赞分布式 KV 存储服务
数据库/存储学习路径推荐
我自己就是从业务自学转入数据库内核研发岗位的,根据自己的经历,简单总结了一下入门数据库相关的学习路线、学习资料、项目书籍推荐等,大家可以参考。 必看课程
roseduan
2023/03/09
4.6K0
数据库/存储学习路径推荐
2023 年小结
去年六月份加入到现在的公司,目前已经一年多了,今年全年的时间,逐步深入的参与到数据库内核的一些 feature 开发中来,做了非常多的事情,包括:
roseduan
2023/12/26
2270
2023 年小结
这门分布式 KV 存储系统课程教会了我什么? | 我与 Talent Plan
张艺文,华中科技大学武汉国家光电实验室直博二年级,主要研究方向为基于新型存储设备的 KV 存储。PingCAP Talent Plan 第二期优秀学员。
PingCAP
2019/08/20
8630
分布式系统概述
当只有一台计算机的时候,也就是单机系统,我们不需要考虑通信、容错、一致性等等问题,只需要将应用部署在这台计算机上,它的正确运行是显而易见的——就像我们平时所做的那样,自己编写一个C++程序并运行。
月梦@剑心
2023/08/31
3030
分布式系统概述
一个全新的 kv 存储引擎 — LotusDB
经历了大概 4 个月的打磨,LotusDB 的第一个 release 版本终于发布了,我看了下,有 200 多次 commit(接近 rosedb 一年多的 commit 次数了)。
roseduan
2022/04/18
9040
一个全新的 kv 存储引擎 — LotusDB
分布式系统学习资料汇总
因此只需要在“时空”两个维度对分布式系统进行把握,就能提纲挈领,愈学愈明。“时”表示分布式系统的演进脉络,可以通过阅读不同时期、学术界工业界的一些论文来把握。“空”表示分布式系统中所研究的基本问题的拆解,可以通过阅读一些书籍建立分布式系统的知识体系。本文将我在学习分布式系统知识过程搜集到的一些资料,按类别简单汇总,以飨诸君。资料排名没有先后,请按需采用。
木鸟杂记
2021/09/26
7190
分布式系统咋做同步?虐死人!
分布式系统,通过数据冗余,来保证数据的安全。要写一个分布式系统,一道绕不过去的坎,那就是数据同步。
xjjdog
2021/08/25
8690
DDIA:共识协议和分布式事务有什么关系?
分布式事务,尤其是使用两阶段提交实现的分布式事务,毁誉参半。一方面,他们可以提供其他方式难以实现的安全保证;另一方面,由于运维复杂、降低性能、承诺过多,他们广受诟病。为了避免分布式事务带来的运维复杂度,很多云服务选择不支持分布式事务。
木鸟杂记
2023/12/04
3890
DDIA:共识协议和分布式事务有什么关系?
ZBS:SmartX 分布式块存储 -- 元数据篇
以下文章转载于SmartX知乎博客,不同与国内的很多公司,SmartX完全自主开发了分布式块存储-ZBS,整个系统从架构到实现充分考虑了超融合系统的特点,以下内容进行了充分阐述。
大数据和云计算技术
2019/09/24
1.8K0
ZBS:SmartX 分布式块存储 -- 元数据篇
分布式文件系统设计,该从哪些方面考虑?
分布式文件系统是分布式领域的一个基础应用,其中最著名的毫无疑问是 HDFS/GFS。如今该领域已经趋向于成熟,但了解它的设计要点和思想,对我们将来面临类似场景 / 问题时,具有借鉴意义。并且,分布式文件系统并非只有 HDFS/GFS 这一种形态,在它之外,还有其他形态各异、各有千秋的产品形态,对它们的了解,也对扩展我们的视野有所俾益。本文试图分析和思考,在分布式文件系统领域,我们要解决哪些问题、有些什么样的方案、以及各自的选择依据。
芋道源码
2020/06/16
2.3K0
分布式文件系统设计,该从哪些方面考虑?
【架构专题】阿里巴巴面试必问的分布式算法
分布式算法是并行算法的一个子类型,通常同时执行,算法的不同部分在独立的处理器上同时运行,并且对算法的其他部分正在做什么的信息有限。开发和实施分布式算法的主要挑战之一是在面对处理器故障和不可靠的通信链路时成功地协调算法的独立部分的行为。解决给定问题的适当分布式算法的选择取决于问题的特征,以及算法将运行的系统的特征,例如处理器或链路故障的类型和概率,可以执行的进程间通信,以及不同进程之间的时间同步级别。
35岁程序员那些事
2023/08/18
5750
【架构专题】阿里巴巴面试必问的分布式算法
分布式系统的一个简单的学习框架
最近在看 Martin Fowler 网站上的Patterns of Distributed Systems系列文章,突然想到,是不是也写一篇文章简单梳理一些分布式系统的学习框架,方便以后查阅,于是就有了这篇文章。下篇文章将会编译Patterns of Distributed Systems系列文章,大家可以与这篇文章对比下,选择自己合适的方式学习。
哒呵呵
2020/08/25
6170
万字总结 分布式系统的38个知识点
天天说分布式分布式,那么我们是否知道什么是分布式,分布式会遇到什么问题,有哪些理论支撑,有哪些经典的应对方案,业界是如何设计并保证分布式系统的高可用呢?
一灰灰blog
2022/08/23
7950
字节跳动自研强一致在线 KV &表格存储实践 - 上篇
互联网产品中存在很多种类的数据,不同种类的数据对于存储系统的一致性,可用性,扩展性的要求是不同的。比如,金融、账号相关的数据对一致性要求比较高,社交类数据例如点赞对可用性要求比较高。还有一些大规模元数据存储场景,例如对象存储的索引层数据,对一致性,扩展性和可用性要求都比较高,这就需要底层存储系统在能够保证数据强一致的同时,也具有良好的扩展性。在数据模型上,有些数据比如关系,KV 模型足够用;有些数据比如钱包、账号可能又需要更丰富的数据模型,比如表格。
2020/06/09
1.6K0
字节跳动自研强一致在线 KV &表格存储实践 - 上篇
相关推荐
raft 算法、分布式 KV 面试汇总
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档