1 基本介绍

要求

  • 数据库基本原理
  • C语言
  • 数据结构
  • 操作系统

数据存储需求

数据存储方案

  • 文件
  • excel
  • 数据库

2 kkdb

成果展示

  • 初始化

    # 系统表
    sys_class: 存储所有表
    sys_attr: 存储所有列
    
    dbinit
    ls ~/dbdata
    
  • 基本语法

    • CREATE

      输入:CREATE TABLE t1 (c1 INT, c2 TEXT);
      语法解析:表名、列名、列数据类型
      系统表:存储表信息、列信息
      表文件:创建文件
      
    • INSERT

      输入:INSERT INTO t1 VALUES (1, 'first')
      语法解析:表名、列数据
      数据处理:封装数据
      表文件:写入数据
      
    • SELECT

      输入:SELECT * FROM t1
      语法解析:表名、列
      表文件:读取数据
      数据处理:解析数据
      
    • UPDATE

    • DELETE

    • DROP

  • 并发访问

    • CS模式

      • 服务器

        dbserver start
        
      • 客户端

        dbclient 127.0.0.1 8888
        SELECT * FROM t1;
        
    • 服务器多线程

      dbclient 127.0.0.1 8888
      dbclient 127.0.0.1 8888
      

      输出:服务端sprintf,然后发至客户端

  • 正确性

    • 原子性、隔离性:事务ID、事务快照、可见性

      # 原子性
      BEGI
      INSERT INTO t1 VALUES (3, 'three')
      INSERT INTO t1 VALUES (4, 'four')
      ROLLBACK
      
      # 隔离性性
      dbclient
      BEGIN
      INSERT INTO t1 VALUES (5, 'five')
      INSERT INTO t1 VALUES (6, 'six')
      COMMIT
      
      dbclient
      SELECT * FROM t1
      SELECT * FROM t1
      
  • 高性能

    • 异步落盘:buffer pool

      dbclient
      CONFIG checkpoint = 10min
      
      INSERT INTO t1 VALUES (7, 'seven')
      hexdump t1
      CHECKPOINT
      hexdump t1
      
  • 故障恢复:

    • 预写日志

      dbclient
      INSERT INTO t1 VALUES (8, 'eight')
      cat xlog
      
    • 故障恢复

      kill dbserver
      dbserver 127.0.0.1 8888
      hexdump t1
      SELECT * FROM t1
      
  • 基本运算

    • 投影

      SELECT c2 FROM t2;
      
    • 选择

      • 内置函数

        SELECT is_str(c1) FROM t1;
        
      • WHERE子句

        SELECT * FROM t1 WHERE c1 > 10
        
        SELECT * FROM t1 WHERE is_bigger(c1, 10);
        
    • 限制

      SELECT * FROM t1 WHERE c1 > 10 LIMIT 1;
      
    • 执行器

      for (;;)
          scan
          filter
          qual
      
  • 高性能

    • 索引

      CREATE INDEX ON t1(c1);
      SELECT * FROM t1 WHERE c1 = 666;
      
  • JOIN

  • 优化器