B+树实现 最近看八股不时会看到B+树这个概念,想起之前做的CMU15445在Project2中就有这方面的实现,但我当时做的2021的,Project2是Hash Index,实现了一个可扩展的哈希表。但在2021的项目下还是保留了之前的代码和测试用例,所以我就想折磨锻炼一下自己。 附:B+ Tree Visualization可视化 以下分阶段阐述实现过程吧,首先是B+树结构 2022-09-10 DB #数据结构 #B+树 #数据库
DDIA第二部分读后感(下) 一 事务 由于大多数事情(系统宕机,网络中断等)都会导致整个系统故障,由此会产生许多不可挽回的错误。所以出现了事务,这是将多个读写操作组合成一个逻辑单元的一种方式。它将所有读写操作被视作单个操作来执行:整个事务要么成功 提交(commit),要么失败 中止(abort)或 回滚(rollback)。 接下来主要讲隔离级别 1.1 概念1.1.1 ACID 老生常谈的话题了 2022-08-04 DB #DDIA
DDIA第二部分读后感(上) 这一部分就是本书比较困难且有意思的了,在前言就解释了为什么要将数据分布到多台机器上: 可伸缩性:将单台机器的数据量,读取/写入负载分散到多台机器上 容错性:一台机器故障,另一台机器可以接管 延迟:使得每个用户可以请求到离自己最近的机器,提高速度 并且提出了三种架构: 共享内存架构:这其实讲得就是一种单机架构,通过 垂直伸缩(购买更强大的机器),提供容错能力。 2022-07-17 DB #DDIA
DDIA第一部分读后感 新开一个坑:阅读完DDIA并做总结。DDIA(data-intensive applications),称为数据密集型应用。这是在字节青训营时了解到的,是一本关于数据处理和数据存储技术的书籍。根据序言说,这本书更偏向于多种数据系统以及存储工具的使用以及场景,而不是具体深入到某种技术当中。我认为该书更多是介绍不同存储数据与处理技术的比较与实践,可以给应用开发提供更多的思路(感觉大多数系统都 2022-06-23 DB #DDIA
对Raft的一些总结 历时一个半月,总算完成6.824的四个Lab,虽然为了赶进度很多思路都是借鉴网上的博文,思路,但作为第一次接触分布式共识算法小白的我来说,也从其中学到了不少东西。在实现过程中,也遇到了许多Bug,一些Conner case要反复调试才能出来,对此,也认识到了实现一个可靠完备的共识算法是十分艰辛的。接下来,我会以问题的形式总结一些在实现6.824Lab过程中的思考,也是对Raft算法的一个 2022-05-28 共识算法 #Raft
架构初探 前几天上了好几节字节的架构课,上的很懵逼,这里稍微总结一下,方便自己对企业架构有个大体的认识。 0 架构初识0.1 什么是架构 实现一个软件的方法论。 没错,就是这么简单= =。百度一堆抽象的概念,但感觉架构就类似于地基。针对不同软件都有一种方法而已。 0.2 架构类型单机 软件就是指所有功能都实现在一个进程中,并部署在一台机器上。缺点显然是无法应对C10问 2022-05-23 架构 #架构
GO的内存管理 这其实和上一篇文章“GMP调度模型”有着一定关联,当一个协程通过GMP模型调度产生对象以后,就要涉及到Go的内存管理机制了。本文的内存管理是一个比较大的概念,包含了垃圾分配和对象内存管理。 0 整体架构&概念 首先要明确自动内存管理其实就是指垃圾回收,由程序语言的运行时系统(runtime)管理动态内存。另外,几个英文对照的概念: Mutator:业务线程,分配新对象, 2022-05-22 Go #Go
6.824 Lab 4: Sharded Key/Value Service 该部分要求我们实现ShardKV。在前面Lab中,我们实现一个构成基础分布式数据库的框架,支持多节点的数据一致性,CURD,日志快照。但在单一集群中,这样的实现会导致所有的请求都要由Leader来处理,当数据增长到一定程度,会导致请求响应时间变长。解决办法就是,将数据按某种方式分开存储到不同的集群,将不同的请求发送到不同的集群中。 Lab还是偏难的,论文中也没有具体去写这一部分 2022-05-18 Lab #mit6.824
GMP模型详解 前几天上青训营的课时老师在将Go的垃圾回收时提到了GMP模型,但并没有作深入讲解,后面的课似乎也不会在提及了,故参考网上博文以及自己的一些理解来总结一下。在此之前,Goroutine想必学过Go的人都是必知的,它是类似线程一样的可调度单位,也是使得Go享誉天生支持高并发这一名号的缘由。通过创建多个Goroutine来处理任务,将这些Goroutine分配,负载,调度到处理器采用的就是GM 2022-05-14 Go #Go
6.824-lab3:Fault-tolerant Key/Value Service 在Lab3中,需要使用前面实现好的Raft来构建一个K/V数据库。客户端(client)和服务端(server)进行交互。整体难度肯定比之前Raft低多了。服务器就相当于Raft中的每个节点, 0 前言 & 要求 该Lab3分为两部分:第一部分需要实现一个支持GET,PUT,APPEND的K/V数据库,这不需要考虑进行日志压缩/快照。而在第二部分则需要开始考虑进行日志压缩 2022-05-07 Lab #mit6.824
6.824 lab2:Raft Lab2难度还是很大的,要求实现一个Raft一致性算法,主要分为了三个部分:领导选举,日志复制,持久化,日志压缩。总共花了差不多半个月完成,期间由于要准备面试,夏令营啥的耽误了些时间。在做Lab前最好先将Raft论文通读几遍,理解大概的流程,并且课程提供的locking, structure 的描述以及guidance也得好好看看,不然BUG乱飞。 0 前言 & 要求 实 2022-05-01 Lab #mit6.824
GFS论文读后感 该论文是Google的三架马车之一,是实现了一个面向大规模密集型应用,可伸缩的的分布式文件系统。分布式存储的开篇之作,论文中主要阐述了该系统接口的扩展,如何设计,最后又讲了性能测试以及生产环境下性能数据。 读后感不一定按论文框架描述,主要还是自己对系统的理解与总结 0 前言 论文在简介中谈到了系统设计的初始思路,要考虑的因素 组件(程序,系统,机器)故障属于常态事件, 2022-04-20 论文阅读 #分布式系统 #GFS
MapReduce论文读后感 在MIT6.824的第一个Lab中,就是要我们实现一个MapReduce系统,当时只是粗略看了一下其基本的实现,再参照网上思路完成了该Lab。今天面试被问到该论文,很多问题都没答好,看来论文的阅读还是十分重要。🤔 0 前言 首先从摘要出发,摘要首先基本说明MapReduce大致流程,其实现需要注意的点以及其作用。 MapReduce是用于处理和生成超大数据集的算法模 2022-04-19 论文阅读 #MapReduce #分布式系统
MySQL事务的实现原理 上次和字节的学长聊天模拟面试被问到这个问题,没答上来,一直以为事务就是事务= =,处理问问ACID还能问啥,后来百度了下,发现还真有事务的实现原理,看了很多博文,感觉还是没形成自己的知识体系,还是自己写一篇好了。 0 前言 首先,都知道事务的四大特性:原子性,一致性,隔离性,持久性。一般问事务的原理是问MySQL是怎么实现这四大特性的,值得一说的是,不是因为是事务,才实现了这四大 2022-04-18 数据库 #MySQL
谈谈Java的字符串及其常见问题 一直对Java的字符串概念很模糊,记得很早之前就看到一道经典面试题:“String s = new String(“a”)”产生了几个对象“,看了许多文章都不太明白,并且,由此产生的问题又有”String a = b + c空间上怎么分配“,”String c = “abc”产生了几个对象“等等。这里还是写篇博文将Java字符串有关的知识总结下把🤣 0 Java的字符串类 Ja 2022-04-17 Java #Java