待改进:
- 启动时高效收集已分配和未分配page id的信息,使用bitmap管理页面号信息
- 使用bitmap做管理后就没有必要使用max_ava_pgid_、max_alloced_pgid_、alloced_pgid_和free_pgid_对page id做管理,这会占用大量空间,拿一个缓冲池(不是bpm)存放bitmap直接做管理更方便高效
- 相同表内的数据没有做到连续存储,磁盘I/O开销会非常大!(当然这是后话,如果以实现基本功能为目标,它的优先级不高)
存储模型:行存储
页面的物理排列:所有数据都是存放在一个文件中的,依靠页面的page id得到其存储的偏移值
启动模式:创建文件启动和读文件启动,前者是在没有任何已有文件下,自行创建文件启动,后者依靠读取已有文件启动
和15-445实现的差不多,暂时没有什么特别的
为降低复杂度,不支持联合索引
聚簇索引
索引为立即更新模式
- 不支持子查询
- 不支持查询下推,不做任何优化
目前支持的关系代数:
- 选择(σ)
- 投影(π)
- 笛卡尔积(×)
- 聚集(γ)
目前支持的聚集函数:
- MAX()
- MIN()
- COUNT()
- SUM()
- DDL
- 创建表
- 删除表
- 重命名表(暂不实现)
- 查看表(暂不实现)
- DML
- 插入数据
- 删除数据
- 更新数据(暂不实现)
- DQL
- SELECT后面只支持聚集函数和列名,不支持其它功能
- FROM后面最多只支持两张表的联结
- where后面支持"<" "<=" ">" ">=" "=" "!=",不支持and、or等
- DCL
- 目前不准备支持任何DCL
- CREATE
- 有且只有一个key
- 全部not null
- 目前支持的类型:Bool、Integer、Decimal和Char
- DROP
- INSERT
- 只支持如下形式:
INSERT INTO table_name VALUES('123', 1);
- DELETE
- SELECT
目前只实现下面四种类型,暂时没必要实现更多的类型
- Bool
- Integer(只支持正数)
- Decimal(只支持正数)
- Char
- BigInt(TODO) 在计算sum的时候可能会需要用到