02 2022 档案
摘要:##为什么需要更加细粒度的强制类型转换? C语言中的显示强制转换能够强调风险,要程序员意识到他在做什么 但是粒度过大,C风格的强制类型转换统一使用(),而()在代码中随处可见,所以也不利于使用文本检索工具(例如 Windows 下的 Ctrl+F、Linux 下的 grep 命令、Mac 下的 Co
阅读全文
摘要:时间 2022.02.27 为什么需要join 由于为消除table中信息的冗余,我们会采取normalize来使得数据库table的设计符合一定范式,但是之后需要使用join来重建原来的tuple 一般使用inner equijoin,inner equijoin连接两张表中key相同的tuple
阅读全文
摘要:homework2 index 假设度为n leaf node:ceil((n - 1) / 2) ⇐ k ⇐ n- 1,leaf node看的是key的个数,那么对于n = 4的情况,2<= k ⇐ 3 inner node:ceil(n / 2) - 1 ⇐ k ⇐ n - 1, inner n
阅读全文
摘要:本节主要介绍Operator Execution Sorting 对于查询的中间结果也有可能放到磁盘中,比如查询中国人的相关信息(10+亿) 对于DBMS的操作,更加偏好具有sequential I/O的算法 外部排序(外部归并排序)每次两个页是2way外部归并排序 先把每个页的内部排序,塞到内存中
阅读全文
摘要:除了redis, voltdb, h-store等,都会利用多核cpu,并尽量减少磁盘I/O的延迟,当然需要保证thread-safety CONCURRENCY CONTROL A concurrency control protocol需要保证正确性,其正确性的标准在于: **Logical C
阅读全文
摘要:回顾 上节提及了许多数据库内部使用的数据结构,它们可以用来存储内部元数据,存储核心数据,临时数据结构,实现表的索引,表的索引,可能涉及范围查询 表的索引(Table Indexes) 定义 table index是表的某些列(某些attribute)的一个复制,并包括一个指向某些tuple的标识,比
阅读全文
摘要:2020fall lab1 实验说明 该lab需要实现一个buffer pool lab的实现需要是线程安全的,用latch(在os中被称作lock)来保护内部数据结构的关键部分 任务1 LRU替换策略 主要是实现LRUReplacer这个子类 LRUReplacer的大小与BufferPool一致
阅读全文
摘要:本节主要介绍DBMS如何访问页中的数据 回顾 首先我们需要讨论DBMS怎么用execution engine去读写数据,主要使用两种数据结构: Hash Tables Trees 数据结构 可用之处 DBMS的内部在许多地方需要使用数据结构,比如: Intenal Meata-Data:用于追踪数据
阅读全文
摘要:本节主要介绍DBMS是如何管理memory与disk之间的数据来回移动的 为什么需要Buffer Pools 由于系统不能直接处理磁盘中的数据,DBMS需要为了系统将数据从磁盘放入内存中,又由于内存容量有限,DBMS需要进行内存数据与磁盘数据的交换;这其中的权衡是,需要系统看起来好像所有的数据都以及
阅读全文
摘要:本节讲述DBMS如何在磁盘文件中保存数据 回顾 在一个关系型数据库中,数据以表的形式呈现,每个表有多个列,每个列有一个唯一的名字,表的每一行表示一个单位的信息(one piece of information) 数据抽象 一个系统想要可用,它必须能够高效的取数据,因此在数据库中,数据库开发者用了一些
阅读全文
摘要:本节介绍SQL的高级用法 关系型语言 当用户使用声明式语言,他只需要说明他所需要的结果。DBMS会优化产生结果的过程。 Relational algebra是基于集合(无序,不可重复),而SQL是基于背包(无序,可重复) SQL历史 SQL来源于IBM的System R项目。其主要由三种命令组成:
阅读全文
摘要:这个lab用来检测CPP知识的掌握 开始 我这里为了做B+树的lab,需要将现在的bustub回退到2020 // 将代码回退到某一版本,head 指向当前的目标版本,删除之后的所有版本 git reset --hard 444765a // 检查一下是否回退到正确的版本 git log // (强
阅读全文
摘要:总览 这个lab要实现一个路由器,其余lab5 路由器一般有好几个网路接口,其根据路由表决定从哪个接口转发和下一跳的IP地址,这个lab不需要实现OSPF, RIP,BGP,SDN,SDN控制器等路由选择算法。 路由器根据路由表从指定接口转发报文,也能够从各个接口接收报文 实现 void add_r
阅读全文
摘要:Lab1 stitching substrings into a byte stream 概述 Lab1 将实现一个流重组器,也就是一个模块将小的字节片段(与TCP segments不一样,TCP segments是互联网上的IP数据包载荷)重新组装成一个连续的,正确的字节流。 Lab2 将实现一个
阅读全文
摘要:综述 这个lab将实现网际接口network interface也就是IP数据包与链路层之间的桥 这张图展示了lab5与其他lab的联系,TCP peers的报文通过网际接口真正的传递,对于TCP中的IP层实现,Lab4中官方已经帮忙实现了;而IP层通过最长前缀匹配原则传递到合适网卡,其中网际接口层
阅读全文
摘要:总览 一个TCP endpoint(TCPConnection)是TCPSender与TCPReceiver的结合体 TCPConnection的segment可以被放入UDP的数据包中或则IP的数据包中 这个lab最后会基于实现的TCPConnection,给出一个叫做CS144TCPSCocke
阅读全文
摘要:总览 lab3需要实现TCPSender ,TCPSender的作用是将发送字节流转化为TCPsegment 激动人心的是,在lab4中,将实现一个真实的TCPConnection,并通过它联通Internet世界 TCP Sender TCPSender负责从一个ByteStream读取字节并将其
阅读全文
摘要:Lab2 the TCP receiver 总览 这次实验要实现TCP receiver,它将TCP segments转换为字节流 TCP receiver 通过segment received() 方法接收segments TCP receiver还需要告知发送方确认号ackno,也就是第一个un
阅读全文
摘要:右值引用 lvalue 是 loactor value 的缩写,rvalue 是 read value 的缩写 左值是指存储在内存中、有明确存储地址(可取地址)的数据; 右值是指可以提供数据值的数据(不可取地址); 通过描述可以看出,区分左值与右值的便捷方法是:可以对表达式取地址(&)就是左值,否则
阅读全文
摘要:数据库的定义 由一些互相有联系的数据所组成的集合,该集合模拟了现实世界的某些方面 并且数据是大多数计算机应用的组件核心 为什么需要database,也就是一般的文件系统为什么不行flat flie strawman 现在假设需要存储管理一个数字音乐商店,我们需要存储管理以下数据: Artists的信
阅读全文