存储
文章平均质量分 92
程序员小董
毕业后先在腾讯做了近3年的kv存储引擎开发
之后在阿里做了3年多互动游戏的开发
展开
-
RocksDB的关键参数与优化方案
默认情况下max_total_wal_size是0,系统会使用多个columnFamily的write_buffer_size* max_write_buffer_number的积相加。控制并发度: 当增大 min_write_buffer_number_to_merge 的值时,系统会允许更多的MemTable转换为Immutable MemTable而不立即进行Flush操作,这意味着可以在内存中累积更多的数据,提高并发写入性能,尤其是在高吞吐量场景下。单个memtable的最大大小,默认64MB。原创 2024-02-27 10:59:33 · 1160 阅读 · 1 评论 -
听小董谝存储 九
目录万年不变背景需求整理第一版 完全内存第二版 有序下刷第三版 分层下刷关于get与list万年不变我爱glt另外本文实际上就是LevelDB的解析,大家可以看完我的博客,再找一些更深入的文章读一下。背景老鸟:咱们之前设计的存储系统,最近有了点新需求。小菜:你说。老鸟:之前省里王警官用咱们的存储系统,存储省里所有人的身份证信息,key是身份证,value是她们的具体信息,之前get、set、del用的很溜。具体的表格如下: Key(身份.原创 2020-08-15 19:06:25 · 307 阅读 · 1 评论 -
听小董谝存储 八
目录序章DispatcherMover几个问题glt序章前面几章,其实已经把这个存储系统的核心模块说清楚了。但是一些附属模块,例如dispatcher与mover还是没有讲。这一节,作为整个系统的最后一篇,就说说这两个模块。Dispatcher其实整个dispatcher的功能很简单的,就是发现集群里面的不稳定因素,然后找人处理而已。那么具体什么情况算是不稳定因素呢? 某个datashard的体积太大(单个datashard理论上可以达到一个卷的体积那么...原创 2020-07-19 16:01:09 · 211 阅读 · 0 评论 -
听小董谝存储七
目录序章序章前面几章,我们已经明白了particle层的读写流程。但是我们还有问题如果机器断电了,数据怎么恢复。一些设定首先我们得先确定下面几个问题1 什么时候需要恢复数据? 当进程挂掉的时候 当机器直接死机了2 什么时候恢复的数据会真的被使用? 我们有三个副本,当一个或者两个副本死掉了,我们会指向搬迁操作,把数据在新的地方变成新的三副本。只有当3个机器都死掉了,我们才需要使用恢复的数据。3 哪些数据需要恢复?图一 parti...原创 2020-07-19 14:57:45 · 236 阅读 · 0 评论 -
听小董谝存储 六
序章前一章,我们大体了解了存储层的大体设计原理。但是解决了一个问题,又冒出一堆问题。具体的问题有Bolock里面有脏数据了,怎么回收。索引节点感觉还有几个问题,但是我一时说不上来。断电了咋办,数据怎么恢复?block是怎么组织的,内存是怎么组织的。这一节,就解决这几个问题。关于内存与磁盘的资源组织小菜:请注意,我并不是想实现一个存储系统,老师你只用说大体设计就OK,不用牵扯太多细节哦。老鸟:OK。既然说到了内存与磁盘的,那么咱们就得理清楚上一章的数据结构里,哪...原创 2020-06-24 16:58:15 · 255 阅读 · 0 评论 -
听小董谝存储 五
目录序章第一章 纯内存版1.1 初始化流程1.2 读写流程第二章 数据开始下刷第三章 关于覆盖写第四章 关于del我爱glt序章前面几章总地说明了一个存储系统的主要模块,之后又分别讲了portal和master模块的设计思想。但是我知道大家都有一种隔靴搔痒的感觉,因为存储系统的核心,数据具体是怎么组织在磁盘上的,读写的具体实现又是什么我们还一无所知。在这一节,我会从零到一的构建一个存储层模块,详细的告诉大家存储的具体实现。...原创 2020-06-22 23:52:28 · 237 阅读 · 0 评论 -
听小董谝存储 四
我爱glt序章前面几章介绍了存储系统整体的架构和master层的一些功能设计。这一节主要聊聊portal这一层的设计。如下图一,portal是直接对client提供服务的,它的主要功能就是将用户的请求导入特定的particle上。这一个大功能其实也可以进行拆解,具体为如下三部分:1 与master交互,获取准确的路由2 根据key找到对应的particle上的data shard3在多副本的情况下确定读写顺序转存失败重新上传取消转存失败重新上传取消正在上传…重新上传取消正在上原创 2020-06-17 14:52:19 · 340 阅读 · 0 评论 -
听小董谝存储 三
序章前面两章基本上只是告诉了大家一个存储系统最顶层的模块与路由是什么样子的,但是具体各个模块都是怎么工作的我们依然一无所知,从这一章开始,我们就依次深入了解一下Master,Portal,Particle都是怎么工作的。这一节 我们先了解一下Master第一章 Master的功能图一 整体框架图二 路由样式老鸟:小菜,图一图二就是前面两章的总结。咱们这一节说的是Master模块的功能。那么第一步,咱们就得先总结出Master都有哪些功能。你先谈谈你的看法吧。...原创 2020-06-15 20:46:38 · 366 阅读 · 0 评论 -
听小董谝存储 二
序章在上一节,我们只是画出了个一个KV存储系统的顶层架构图,同时也大体地划分了各个模块的功能,但是整个系统的核心:路由是怎么划分的,怎么确定一个key具体存储在哪个particle我们还一无所知。这一节我们就重点讲讲这个路由相关的知识。第一章 来个中间层老鸟:还记得上一节,我们直接用key的hash值取余,来确定key到底存放在哪个机器上的思路么?小菜:记得呀,但是这个思路有个很大的问题,如果之前有99个机器,后面增加1台,变成了100。那么之前对99取余,现在对100取余,数据大都找不到了。具体怎原创 2020-06-12 22:38:05 · 334 阅读 · 0 评论 -
听小董谝存储 一
目录序言第一版第二版第三版第四版序言小董本人是2017年研究生毕业,当年7月份就进入了深圳一家互联网公司的架构平台部,从事NoSQL的底层存储引擎研发。20年4月份来到杭州某互联网公司,从事上层业务研发,最近偶尔想起之前的存储相关知识,发现有一些细节知识都已经模糊了。有感而发,遂成此文。一方面为自己的技术生涯做个阶段性的总结,其二也希望为对存储领域有兴趣的小伙伴做一下知识普及。来吧,那就开始吧,我争取用最简单的方式让大家能从零到一的明白一个典型的NoSQL引擎的工作原理.原创 2020-06-11 21:36:59 · 400 阅读 · 1 评论