当前位置: 首页 > news >正文

国土资源网站建设方案/百度免费推广怎么操作

国土资源网站建设方案,百度免费推广怎么操作,交互网站怎么做,曹健的wordpress博客重点难点: 1. 理解内存中二进制连续数据存储,如何处理。 2. 理解Table数据结构和Page结构,以及对应的select和insert操作。 测试驱动开发,首先先看我们想要的结果 ~ ./db db > insert 1 cstack foobar.com Executed. db >…

重点难点:

1. 理解内存中二进制连续数据存储,如何处理。

2. 理解Table数据结构和Page结构,以及对应的select和insert操作。

 

测试驱动开发,首先先看我们想要的结果

~ ./db
db > insert 1 cstack foo@bar.com
Executed.
db > insert 2 bob bob@example.com
Executed.
db > select
(1, cstack, foo@bar.com)
(2, bob, bob@example.com)
Executed.
db > insert foo bar 1
Syntax error. Could not parse statement.
db > .exit
~

我们先把这一个简单的用户表,硬编码到代码里面

#define COLUMN_USERNAME_SIZE 32
#define COLUMN_EMAIL_SIZE 255
typedef struct {uint32_t id;char username[COLUMN_USERNAME_SIZE];char email[COLUMN_EMAIL_SIZE];
} Row;void print_row(Row* row) {printf("(%d, %s, %s)\n", row->id, row->username, row->email);
}

然后我们去看主函数包括三个switch部分

第一部分:如果是以.开头的命令,那么解析这个命令,目前这个功能只有.exit

第二部分:解析statement命令,目前只有INSERT和SELECT

typedef enum { STATEMENT_INSERT, STATEMENT_SELECT } StatementType;

第三部分:处理statement命令,目前只有INSERT和DELETE 

int main(int argc, char* argv[]) {InputBuffer* input_buffer = new_input_buffer();Table* table = new_table();while (true) {print_prompt();read_input(input_buffer);if (input_buffer->buffer[0] == '.') {switch (do_meta_command(input_buffer)) {case (META_COMMAND_SUCCESS):continue;case (META_COMMAND_UNRECOGNIZED_COMMAND):printf("Unrecognized command '%s'\n", input_buffer->buffer);continue;}}Statement statement;switch (prepare_statement(input_buffer, &statement)) {case (PREPARE_SUCCESS):break;case (PREPARE_SYNTAX_ERROR):printf("Syntax error. Could not parse statement.\n");continue;case (PREPARE_UNRECOGNIZED_STATEMENT):printf("Unrecognized keyword at start of '%s'.\n",input_buffer->buffer);continue;}switch (execute_statement(&statement, table)) {case (EXECUTE_SUCCESS):printf("Executed.\n");break;case (EXECUTE_TABLE_FULL):printf("Error: Table full.\n");break;}}
}

下一步,就搞清楚数据是怎么在内存中存储的。

主要是Table结构

typedef struct {uint32_t num_rows;void* pages[TABLE_MAX_PAGES];
} Table;

Table由若干页组成

这些很多行的数据是分成若干页存储的,一页的大小为4K

const uint32_t PAGE_SIZE = 4096;
#define TABLE_MAX_PAGES 100
const uint32_t ROWS_PER_PAGE = PAGE_SIZE / ROW_SIZE;
const uint32_t TABLE_MAX_ROWS = ROWS_PER_PAGE * TABLE_MAX_PAGES;

每一页存储了多少行的数据,等于每一页的大小去处以每一行的大小

总的最大值就是页数乘行数 

我们先看表的顺序扫描

ExecuteResult execute_select(Statement* statement, Table* table) {Row row;for (uint32_t i = 0; i < table->num_rows; i++) {deserialize_row(row_slot(table, i), &row);print_row(&row);}return EXECUTE_SUCCESS;
}

这里有一步反序列化

void* row_slot(Table* table, uint32_t row_num) {// 先找到对应页的编号uint32_t page_num = row_num / ROWS_PER_PAGE;void* page = table->pages[page_num];if (page == NULL) {// Allocate memory only when we try to access pagepage = table->pages[page_num] = malloc(PAGE_SIZE);}uint32_t row_offset = row_num % ROWS_PER_PAGE;uint32_t byte_offset = row_offset * ROW_SIZE;return page + byte_offset;
}

然后去看插入操作

ExecuteResult execute_insert(Statement* statement, Table* table) {if (table->num_rows >= TABLE_MAX_ROWS) {return EXECUTE_TABLE_FULL;}Row* row_to_insert = &(statement->row_to_insert);serialize_row(row_to_insert, row_slot(table, table->num_rows));table->num_rows += 1;return EXECUTE_SUCCESS;
}

 

http://www.lbrq.cn/news/1243909.html

相关文章:

  • 开发网站监控推荐/手机如何制作自己的网站
  • 域名费用和网站服务器费用是同样的吗/广东: 确保科学精准高效推进疫情
  • 温州网站系统开发/网站建设平台哪家好
  • asp网站开发的实训报告/零基础学什么技术好
  • 哪些网站可以做公司制度/网站建设需要多少钱?
  • 贵州专业网站建设公司/优秀网站设计赏析
  • 一个人在线观看免费高清视频动漫/小红书seo排名帝搜软件
  • 帝国手机网站怎么做/软文发布系统
  • 河北永生建筑工程网站/百度网盘怎么提取别人资源
  • 福州做推广有哪些网站/网络软文怎么写
  • 老外做汉字网站/比较经典的营销案例
  • 深圳网站建设联系方式/谷歌搜索引擎
  • 手机网站特效/营销公司排行
  • 南宁网站建设公司seo优化/线上培训平台
  • dw做网站链接数据库/哪里有整站优化
  • 门户网站制作平台/广州营销课程培训班
  • 一起做英语作业网站/常州百度seo排名
  • 绍兴网站建设设计/建站服务
  • 杭州大型网站建设/公司网络营销策划书
  • 网站解析怎么做/河南网站建站推广
  • 免费炫酷企业网站源码/网站制作哪家公司好
  • 外贸网站怎么推广/138ip查询网域名解析
  • 可以做免费广告的网站/注册网站流程和费用
  • 报考二级建造师证需要什么条件/黑帽seo技术论坛
  • 国务院关于新时期政府网站建设/seo专员工作容易学吗
  • 苏州网络推广苏州网站建设/网络推广及销售
  • 昆明电子商务网站建设/产品软文
  • 湖北网站建设软件有哪些/国内免费顶级域名注册
  • 长沙好的网站建设/客服网站搭建
  • 免费虚拟主机的好处/搜索关键词优化排名
  • Highly Compressed Tokenizer Can Generate Without Training
  • 在 AKS 中运行 Azure DevOps 私有代理-1
  • day38 力扣279.完全平方数 力扣322. 零钱兑换 力扣139.单词拆分
  • Java 学习笔记:常用类、String 与日期时间处理
  • JS-第十九天-事件(一)
  • SpringMVC的高级特性