浅风w1ndの博客
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
  • 读书
  •   
  •   

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
123…5

搜索

Hexo Fluid
载入天数... 载入时分秒...
总访问量 次 总访客数 人