MIT6.5830 Lab1-GoDB实验记录(二)

MIT6.5830 Lab1-GoDB实验记录(二) -- WhiteNight's Site

标签:Golang, 数据库

接下来我们将完成tuple.go的缺失代码,并通过tuple_test.go的测试。

实验步骤
观察tuple.go

观察肯定是第一步,先打开tuple.go。

快300行代码,勉勉强强还在接受范围之内。接下来看看我们要做什么,首要目的肯定就是通过go test tuple_test.go。

实验步骤
分析数据结构

开头就给出了DBType的定义,tuple field?那我们暂且把它当作是元组字段--即每一行的每一个数据可以是什么类型的。说白了就是列的域(domain)是{int,string}。这里限定了存储在数据库中的数据只能是int或者string,对应了lab1.md中提到的"Data types except integers and fixed length strings."。

// DBType is the type of a tuple field, in GoDB, e.g., IntType or StringType
type DBType int

const (
	IntType     DBType = iota
	StringType  DBType = iota
	UnknownType DBType = iota //used internally, during parsing, because sometimes the type is unknown
)

var typeNames map[DBType]string = map[DBType]string{IntType: "int", StringType: "string"}

如果你不记得iota是啥了,这里有一个使用例:Golang中的iota。这里还新建了一个map,看起来是匹配int和string两种数据类型的。

接下来定义了一个FieldType结构。FieldType?字段类型又是什么玩意?

// FieldType is the type of a field in a tuple, e.g., its name, table, and [godb.DBType].
// TableQualifier may or may not be an emtpy string, depending on whether the table
// was specified in the query
type FieldType struct {
	Fname          string
	TableQualifier string
	Ftype          DBType
}

先别着急。我们可以观察到,Ftype的类型是DBType。说明DBType对于FieldType而言是更加底层的方法。

上面的DBType,指向的是每一行的数据,它限定了每个元组中字段的类型。而FieldType指向的是每一列,它限定的是字段所构成的"元组"。举个例子

假设有个table,有四列,或者说是四个字段

id,name,email,address

如果id限定的类型为int,其他三者的类型为string。那么id的域就是{int},相当于Ftype=int;Fname就是"id";那么tableQualifier,顾名思义,"表限定符",指代的是数据库中的表。我们这里没碰到暂时就不管它。

还剩下最后一段:TupelDesc。

// TupleDesc is "type" of the tuple, e.g., the field names and types
type TupleDesc struct {
	Fields []FieldType
}

Desc又是什么?不知道,又是没打注释。Descent?Describe?我们回到lab1.md中看看。

Tuples also have a type (or schema), called a tuple descriptor, represented by a TupleDesc struct, which consists of a collection of FieldType objects, one per field in the tuple, each of which describes the type of the corresponding field.

Fieids的类型是FieldType,说明TupleDesc要比FieldType更高级,它从FieldType继承了它的方法和数据类型。

总结一下,TupleDesc>FieldType>DBType。而TupleDesc存储着每一列字段的名字,类型。

那么接下来就是完成实验一了,下篇文章在慢慢记录。

相关推荐
六月闻君6 分钟前
MySQL 报错:1137 - Can‘t reopen table
数据库·mysql
SelectDB技术团队15 分钟前
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
大数据·数据库·数据仓库·数据分析·doris
inventecsh31 分钟前
mongodb基础操作
数据库·mongodb
白云如幻35 分钟前
SQL99版链接查询语法
数据库·sql·mysql
爱吃烤鸡翅的酸菜鱼1 小时前
MySQL初学之旅(4)表的设计
数据库·sql·mysql·database
The_Ticker2 小时前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
Elastic 中国社区官方博客2 小时前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
企鹅侠客2 小时前
ETCD调优
数据库·etcd
Json_181790144802 小时前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
煎饼小狗2 小时前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存