- 博客(91)
- 收藏
- 关注
原创 《WiscKey: Separating Keys from Values in SSD-conscious Storage》阅读笔记
abstract 我们提供了WiscKey,这是一个持久的基于LSM树的键值存储,具有面向性能的数据布局,它将键与值分离,以最小化I/O放大值。WiscKey的设计是高度SSD优化的,利用了设备的顺序和随机性能特性。我们用微基准测试和YCSB工作负载演示了WiscKey的优势。微基准测试结果显示,WiscKey比LevelDB快2.5×-111×,比随机查找快1.6×-14×。在所有六个YCSB工作负载中,WiscKey比LevelDB和RocksDB都要快。introduction 对于写密集型
2022-02-21 01:42:34 910
原创 ubuntu config
apt源注意ubuntu系统版本代号,以20.04为例/etc/apt/sources.listdeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricteddeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricteddeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal uni
2021-11-19 15:12:39 1125
原创 cmudb(noisepage/terrier)源码阅读
目录为从最开始的commit一个一个记录,目录中[]内为简单概括该部分commit的关键字noisepage[block]截至commit(9092dc387b16beead46b52453417751114133ebd)tuple_access_strategy.h/cpp(列存储block)[block]截至commit(9092dc387b16beead46b52453417751114133ebd)Write down basic skeleton code for TupleAccessSt
2021-09-07 23:41:19 820
原创 Fast Serializable Multi-Version Concurrency Control for Main-Memory Database Systems(阅读笔记)
这篇论文是说一个内存数据库上实现的SI(快照隔离级别)和SSI(可串行化快照隔离级别)的MVCC。版本链是像Figure 1中的undo buffer的形式存储。Figure 1中,左边Accounts表示数据库中唯一存在的一个表,只有两个attributes,为owner和balance。图里表示的讨论的操作是存在A->B转账和查询总所有owner的总余额两种操作。另外,Figure1中的 VersionedPositions 在论文的Efficient Scanning章节里有介绍,可以后面再管它
2021-08-20 22:34:11 383
原创 《6.S081: Operating System Engineering》Lab util: Unix utilities
之前学习6.828没坚持下去,最近突然发现2020fall的更新了,并且还有学习视频了,参考资料貌似更详细了感觉对学习十分友好。又重新燃起了学习的兴趣。于是开始重新启动6.S081的学习。课程Schedule课程相关资料基本都在这个网站上了。...
2021-01-02 16:21:30 326
原创 《Go语言圣经》阅读笔记
《Go语言圣经》电子书《The Go Programming Language》源码目录第一章 入门Hello, World命令行参数第二章 程序结构第三章 基础数据类型第一章 入门Hello, WorldGo语言不需要在语句或者声明的末尾添加分号,除非一行上有多条语句。实际上,编译器会主动把特定符号后的换行符转换为分号,因此换行符添加的位置会影响Go代码的正确解析。函数的左括号{必须和func函数声明在同一行上,且位于末尾,不能独占一行。而在表达式x + y中,可在+后换行,不能在+前
2020-12-28 11:16:04 213
原创 《Distributed Systems》(6.824)LAB4B(Sharded Key/Value Service)
LAB4的系统架构图如下,在前面的Lab4A中,已经实现了LAB4B,
2020-12-01 11:54:41 685
原创 《Distributed Systems》(6.824)LAB4A(Sharded Key/Value Service)
任务描述在之前的lab中我们已经实现了kv存储系统,但是所有的put/get请求都打在leader上,leader的负载很大,因此在Lab4在此基础上进行改进,根据实验任务描述,通过一个master进行集群的配置,一个集群负责一部分碎片任务即shards,可以通过客户端管理master的配置信息,同时master的配置即表示了各个集群该完成什么样的任务,这样,比如对于kv存储系统固定的键的put和get操作都由不同的集群控制,同时客户端在拿到master中关于访问根据数据的hash,数据应该找哪个集群的配
2020-11-29 19:12:05 392
原创 《Distributed Systems》(6.824)LAB3B(Fault-tolerant Key/Value Service)
LAB3B的任务是实现一个快照,但是相对之前难度在于代码量非常大,逻辑处理起来较为复杂,需要处理server层和raft层的交互,以及raft层与raft层之间的交互。client的代码较之前的lab无需改变。流程梳理需要在raft层的log大于给定maxraftstate的时,server层的kv系统进行快照,raft根据应用层的快照再压缩raft层的日志,并且将snapshot和log写入持久化层。而在leader向follower发送心跳包时,根据rf.nextIndex[]和rf.lastInc
2020-11-29 14:32:18 464
原创 《Distributed Systems》(6.824)LAB3A(Fault-tolerant Key/Value Service)
流程MIT 6.824: Distributed Systems- 实现Raft Lab3A
2020-11-26 21:28:10 531
原创 The Missing Semester of Your CS Education
课程首页1/13: Course overview + the shell介绍了一些shell方面的简单指令和概念,比如data、ls、cd、which、pwd、<、>、>>、echo、mv、curl、man等,如果了解linux c编程,这些应该都懂的。列出一些我平时没有注意到的细节和指令。关于文件和目录的rwx权限,进入文件夹需要x权限,以及删除文件时对当前目录需要有写权限等。空格分割参数,如果想要参数包含空格,则使用""或\,比如mkdir hello\ world
2020-11-24 22:06:25 518
原创 《Distributed Systems》(6.824)LAB2(raft)
写在前面本次lab2有三部分,分别是lab2A(leader选举),lab2B(记录日志),lab2C(可持续化),其中最难的点在于lab2C的Figure 8 (unreliable)样例。本次实验我是写了10天左右,尽管LAB分成了3部分,但是实际上可能由于考虑不全面通过了当前的样例在后面被测出来之后就要修改之前的代码。因此不要觉得过了样例就肯定没问题了。我写的代码可以在后面给出的我的GITHUB地址去看,**本篇博客就列出我踩过的坑,不分析我写的代码了。**因为我打算参考GITHUB上高st
2020-11-21 15:24:12 977
原创 《Distributed Systems》(6.824)LAB1(mapreduce)
目录开始之前lab开始之前6.824是mit开的一门分布式系统的课程,任课教师是课程视频B课程首页go文档lab
2020-11-12 13:42:49 1138 2
原创 《Intro to Computer Systems》(csapp)LAB7(proxylab)
网络编程与web服务器与并发《csapp》11章和12章。对锁的理解。lab首先需要阅读本次lab的writeup以及《CSAPP》的网络编程和并发两章,本次lab给我们提供了一个《CSAPP》 上实现的一个tiny(一个web服务器),我们需要做的是写一个代理服务器,用来接受请求,并且将请求发送给tiny启动的服务器。在PART 2和PART 3中添加线程并发访问以及缓存,来完善我们写的代理服务器。实验完成以后可以直接将代理服务器应用到浏览器上。实现主要参考了七 PROXY LAB问题可能由于环
2020-11-06 17:58:38 1596 6
原创 《Intro to Computer Systems》(csapp)LAB6(malloclab)
目录动态内存分配lab动态内存分配lab本次实验参考了《CSAPP》
2020-10-31 13:58:49 535
原创 《Intro to Computer Systems》(csapp)LAB5(shlab)
异常控制流了解基本的LinuxC编程,除了《csapp》的第八章以外,也推荐看看《Linux/Unix编程实践教程》以及《Unix环境高级编程》。LAB本次LAB难度不是很大,但是需要多查阅手册,以及注意细节。在《Linux/Unix编程实践教程》里也简单实现过一个shell。本次lab根据给测试样例一点一点完善shell。test1当标准输入流关闭时退出终端。分析这里简单分析一下已经提供的代码框架。执行我们写的shell时,根据参数进行对应的操作,比如-v、-h、-p参数。默认关闭
2020-10-30 12:28:37 408
原创 《Intro to Computer Systems》(csapp)LAB4(CacheLab)
有2s组,每组有E行,每一行是一个缓存块,每一行包括1个有效位,t个标记位。有2b字节存数据以及有效位和标记位(标记位用来和给定地址的标记位对比,判断给定地址在不在该行中,如果在则命中)。参数是判断高速缓存是否存在对应地址的数据的操作为:参数S和B将m位地址分为了三段,首先通过S找到对应的组,再该组的行中找到标记位t与查询地址的标记为t相等的行,然后再该行包含的块中查找偏移地址位B的位置。即缓存命中。直接映射高速缓存在理解了组、行、标记、偏移地址概念后,直接映射就是每组只有一行,因此当两个
2020-10-28 18:05:35 577 4
原创 《Intro to Computer Systems》(csapp)LAB3(Attack Lab)
话说,试了一下retq弹栈64位,明明pushq压入64位,却只能pushq $0x4017ec,不能pushq $0x4017ec001200目录运行时栈结构缓存区溢出对抗缓冲区溢出的方法栈随机化栈破坏检测(金丝雀值)LAB3Part I: Code Injection AttacksLevel.11Level.12我的错解正解分析Level.13Part II: Return-Oriented Programminglevel.21Level.23运行时栈结构缓存区溢出比如不安全的gets()
2020-10-25 22:50:07 765
原创 《Intro to Computer Systems》(csapp)LAB2(Bomb lab)
目录编译系统常用寄存器操作数格式数据传送指令gcc 和 gdbgdb常用指令lab1编译系统对于源代码hello.c。gcc -Og -S hello.c,则生成hello.s汇编程序。gcc -Og -c hello.c,则生成生成hello.o可重定位文件。gcc -Og hello.c,则生成可执行文件a.out.可以使用objdump -d a.out对.o文件或.out文件进行反汇编。常用寄存器操作数格式数据传送指令gcc 和 gdbgdb常用指令layout
2020-10-24 21:53:38 614
原创 【计算机网络】Stanford CS144(原实验相关内容已删)
该课程主要的作业是自己使用c++实现一个tcp,能够加深对计网的理解。记录解决lab的过程。环境搭建开始时,我使用的是ubuntu16.04,apt下载的gcc版本较低,中间make编译时发现gcc要求8+(lab0的pdf也明确说明),装了半天没成功于是又装了一个ubuntu20.04。之后参考课程网站lab0的pdf,在git上clone项目即可开始实验。LAB0Networking by handFetch a web page使用telnet 发送http(命令中http换成80也是可以
2020-10-22 10:27:50 4349 19
原创 gcc和gdb的使用以及实战(bomblab)
@[toc]目录gcc简介GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。gcc 与 g++ 分别是 gnu 的 c & c++ 编译器。(gcc 命令只能编译 C++ 源文件,而不能自动和 C++ 程序使用的库连接。因此,通常使用 g++ 命令来完成 C++ 程序的编译和连接,该程序会自动调用 gcc 实现编译。)编译过程以一个输出"hello world"的代码为例,编译的过程中分为如下4步(下图来自《csapp》):预处理,
2020-08-27 01:35:28 1876
原创 跳跃表(Skip lists)(算法导论第12课笔记)
目录简介结构搜索复杂度分析插入删除性质代码实现简介跳跃表支持插入、删除、搜索。是个动态(插删)搜索数据结构。同时每个操作复杂度都是对数级别的。“是个随机化的、简单的数据结构。”“几乎可以保证每一步操作都是logN的可能性为(1-1/n^α),n可以取很大。因此极小概率超过logN”其他动态搜索数据结构:树堆(treaps)、红黑树(red-black trees)、B树(B-trees)。结构如果只是一个双向链表,则操作的复杂度是O(n)。下图分别是wiki和课程里两种跳表数据结构的示意
2020-08-22 19:07:50 556
原创 IO多路复用中的select,poll和epoll
文章目录IO多路复用bitmapselect文件描述符select指令实现IO多路复用pollepoll参考IO多路复用IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。bitmapbitmap使用bit来存一些不同的数字,如存1~9中的1,3,5,6,则bitmap只需要10位置,对应1,3,5,6位为1,即[1,0,1,
2020-08-16 20:20:27 624 1
原创 SpringMVC学习(三)编码问题与JSON
目录设置过滤器测试设置过滤器在web.xml中添加过滤器 <filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <par
2020-08-03 17:02:35 249
原创 SpringMVC学习(二)
目录使用注解修改第一个mvc程序修改springmvc-servlet程序controller使用注解修改第一个mvc程序修改springmvc-servlet程序<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2020-08-02 20:46:40 303
原创 SpringMVC学习(一)
目录回顾Servlet导入依赖包添加Servlet类处理请求在web.xml中注册Servlet在WEB-INF中创建跳转视图回顾Servlet导入依赖包父项目导入依赖<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</
2020-08-01 21:09:48 275
原创 Spring学习(四)整合Mybatis
整合MyBatis依赖pom.xmljunitmybatismysqlspring相关aop织入mybatis-spring(对mybatis和spring版本有要求,参考官方文档)配置静态资源过滤器<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://myba
2020-08-01 16:36:39 132
原创 Spring学习(三)
目录AOPAOP在Spring中的作用使用Spring实现Aop(XML实现)log包(方法一用到)service包diy包自定义切面(方法二用到)applicationContext.xmlTest使用注解实现AOP创建注解切面修改配置文件总结AOPAOP(Aspect Oriented Programming)面向切面编程。AOP在Spring中的作用提供声明式事务;允许用户自定义切面横切关注点:跨越应用程序多个模块的方法或功能。即与业务逻辑无关的,但是我们需要关注的部分,就是横切关注点
2020-08-01 02:29:48 273
原创 Spring学习(二)
Bean的自动装配自动装配是Spring满足bean依赖的一种方式,Spring会在上下文(Context)中自动寻找,并自动给bean装配属性三种方式在XML中显式配置在JAVA中显式配置隐式的自动装配Bean(重要)在xml中设置进行自动装配(略去)使用注解实现自动装配导入约束context配置注解的支持<context:annotation-config/>在pojo中添加注解@Autowired,可以在属性上使用,也可以在set方法上使用注意:首先byNa
2020-07-31 13:55:55 86
原创 Spring学习(一)
目录Spring简介Spring配置依赖注入代码pojo配置文件xml测试类Spring简介文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#spring-coreSpring是一个免费开源的框架(容器)轻量级非入侵式的框架控制翻转(IOC)、面向切面编程(AOP)对框架整合的支持理解:对象交给spring管理Spring配置依赖注入方式一:构造器注入方式二:
2020-07-30 21:21:15 243
原创 MyBatis学习(四)
目录缓存一级缓存代码(核心配置、bean、dao、utils、TEST)运行结果二级缓存缓存存在内存中的临时数据,将用户经常查询的数据放在缓存中,用户就不用从磁盘去查询,提高了查询效率一级缓存一级缓存(默认打开),在sqlSession从创建到close之间有效官方文档:select会缓存,增删改会刷新缓存验证:开启日志,在一次sqlsession中查询两次记录,并且比较。再两次查询中间修改一次数据,再查询。代码(核心配置、bean、dao、utils、TEST)mybatis-co
2020-07-29 22:25:10 247
原创 MyBatis学习(三)
目录一对多和多对一处理数据库设计核心配置文件多对一处理bean文件(省略get,set,constuctor,tostring函数)dao接口解决方式一对多处理bean文件(省略get,set,constuctor,tostring函数)dao接口解决方式总结一对多和多对一处理数据库设计CREATE TABLE `mybatis`.`teacher` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NULL DEFAULT NULL
2020-07-29 00:32:56 292
原创 Mybatis学习(二)
目录作用域(Scope)和生命周期SqlSessionFactoryBuilderSqlSessionFactorySqlSession属性名和字段名不一致问题日志的使用使用STDOUT_LOGGING使用LOG4J自定义输出作用域(Scope)和生命周期错误的使用会导致非常严重的并发问题SqlSessionFactoryBuilder一旦创建SqlSessionFactory,就不在需要最佳作用域:局部变量SqlSessionFactory类似数据库连接池,没有任何理由丢弃它或重新创
2020-07-28 20:20:01 229
原创 MyBatis学习(一)
目录简介第一个MyBatis程序步骤配置文件mapper代码创建数据库、表、插入数据pom.xmlmybatis-config.xmlUser(bean/pojo)Dao接口userMapper.xmlTest(测试文件一般放在test同级目录下)简介MyBatis 是一款优秀的持久层框架。官方文档https://mybatis.org/mybatis-3/zh/getting-started.html持久化:将数据在持久状态(数据库/io文件…)和瞬时状态(内存)转化的过程。持久层:完成持久化工
2020-07-28 01:24:41 437
原创 代理模式(Proxy)总结
目录代理模式介绍代理模式的形式静态代理代理模式介绍所谓单例模式,就是为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处:可以在目标对象实现的基础上,增强额外的功能操作,即拓展目标对象的功能。代理模式的形式主要有三种形式:静态代理动态代理(JDK代理、接口代理)Cglib代理(可在内存中动态的创建对象,而不需要实现接口,也属于动态代理的范畴)静态代理...
2020-07-18 14:39:33 1178 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人