• Stars
    star
    2,677
  • Rank 16,348 (Top 0.4 %)
  • Language
    C++
  • License
    Mulan Permissive ...
  • Created over 2 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

MiniOB is a compact database that assists developers in understanding the fundamental workings of a database.

miniob 概述

miniob 是 OceanBase 与华中科技大学联合开发的、面向"零"基础同学的数据库入门学习项目。

miniob 设计的目标是面向在校学生、数据库从业者、爱好者,或者对基础技术有兴趣的爱好者, 整体代码量少,易于上手并学习, 是一个系统性的数据库学习项目。miniob 设置了一系列由浅入深的题目,以帮助同学们"零"基础入门, 让同学们快速了解数据库并深入学习数据库内核,期望通过相关训练之后,能够熟练掌握数据库内核模块的功能与协同关系, 并能够在使用数据库时,设计出高效的 SQL 。miniob 为了更好的学习数据库实现原理, 对诸多模块都做了简化,比如不考虑并发操作, 安全特性, 复杂的事物管理等功能。

(注意:此代码仅供学习使用,请勿用于生产项目。)

快速上手

为了帮助开发者更好的上手并学习 miniob, 建议阅读:

  1. miniob 框架介绍
  2. 如何编译 miniob 源码
  3. 使用 GitPod 开发 MiniOB
  4. 开发环境搭建(本地调试, 适用 Linux 和 Mac)
  5. 开发环境搭建(远程调试, 适用于 Window, Linux 和 Mac)
  6. miniob 词法语法解析开发与测试
  7. doxygen 代码文档

更多的文档, 可以参考 docs 目录下的文档, 为了帮助大家更好的学习数据库基础知识, OceanBase 社区提供了一系列教程, 建议学习:

  1. 《从0到1数据库内核实战教程》 视频教程
  2. 《从0到1数据库内核实战教程》 基础讲义
  3. 《数据库管理系统实现》 华中科技大学实现教材

系统架构

miniob 整体架构如下图所示: 架构

其中:

  • 网络模块:负责与客户端交互,收发客户端请求与应答;

  • SQL解析:将用户输入的SQL语句解析成语法树;

  • 执行计划缓存:执行计划缓存模块会将该 SQL第一次生成的执行计划缓存在内存中,后续的执行可以反复执行这个计划,避免了重复查询优化的过程(未实现)。

  • 语义解析模块:将生成的语法树,转换成数据库内部数据结构(部分实现);

  • 查询缓存:将执行的查询结果缓存在内存中,下次查询时,可以直接返回(未实现);

  • 查询优化:根据一定规则和统计数据,调整/重写语法树。(部分实现);

  • 计划执行:根据语法树描述,执行并生成结果;

  • 会话管理:管理用户连接、调整某个连接的参数;

  • 元数据管理:记录当前的数据库、表、字段和索引元数据信息;

  • 客户端:作为测试工具,接收用户请求,向服务端发起请求。

OceanBase 大赛

2022 OceanBase 数据库大赛是由中国计算机学会(CCF)数据库专业委员会指导,OceanBase 与蚂蚁技术研究院学术合作团队联合举办的数据库内核实战赛事。本次大赛主要面向全国爱好数据库的高校学生,以“竞技、交流、成长”为宗旨,搭建基于赛事的技术交流平台,促进高校创新人才培养机制,不仅帮助学生从0开始系统化学习数据库理论知识,提升学生数据库实践能力,更能帮助学生走向企业积累经验,促进国内数据库人才的发展,碰撞出创新的火花。

OceanBase 初赛基于一套适合初学者实践的数据库实训平台 miniob,代码量少,易于上手学习,包含了数据库的各个关键模块,是一个系统性的数据库学习平台。基于该平台设置了一系列由浅入深的题目,以帮助同学们更好"零"基础入门。

更多详情, 请参考 OceanBase 大赛

1. 大赛手把手入门教程

大赛入门教程

2. 大赛赛题

赛题介绍

3. 提交测试

题目完成并通过自测后,大家可以在 miniob 训练营 上提交代码进行测试。

在提交前, 请参考并学习 训练营使用说明

客户端输出需要满足一定要求,如果你的测试结果不符合预期,请参考 miniob 输出约定

4. 大赛FAQ

大赛 FAQ

在线开发平台

本仓库基于 Gitpod 建立了快速在线开发平台, 点击下面按钮一键体验(建议使用 Chrome 浏览器)

Open in Gitpod

首次进入 Gitpod 时需要安装一些依赖,依赖安装完成后,终端界面会显示 "Dependency installed successfully"。运行 bash build.sh --make -j4 命令即可编译miniob。

Contributing

OceanBase 社区热情欢迎每一位对数据库技术热爱的开发者,期待携手开启思维碰撞之旅。无论是文档格式调整或文字修正、问题修复还是增加新功能,都是对 OceanBase 社区参与和贡献方式之一,立刻开启您的 First Contribution 吧!更多详情, 请参考 社区贡献.

License

miniob 采用 木兰宽松许可证,第2版, 可以自由拷贝和使用源码, 当做修改或分发时, 请遵守 木兰宽松许可证,第2版.

社区组织

More Repositories

1

oceanbase

OceanBase is an enterprise distributed relational database with high availability, high performance, horizontal scalability, and compatibility with SQL standards.
C++
7,077
star
2

odc

OceanBase Developer Center(ODC), An open-source, enterprise-grade database tool for collaborative development
Java
212
star
3

obproxy

A proxy server for OceanBase Database.
C++
110
star
4

obdeploy

A deployer and package manager for OceanBase open-source software.
Python
64
star
5

obclient

A MariaDB-based command line tool to connect to OceanBase Database.
C++
50
star
6

ob-operator

Kubernetes operator for OceanBase
Go
33
star
7

oceanbase-design

An enterprise-class design system based on Ant Design and extending it.
TypeScript
27
star
8

oblogproxy

A proxy service of incremental log of OceanBase
C++
27
star
9

obconnector-j

OceanBase Client for Java is a JDBC 4.2 compatible driver, used to connect applications developed in Java to OceanBase Database Server.
Java
26
star
10

obconnector-c

OceanBase Client for C. A driver to connect applications developed in C language to OceanBase Database.
C
22
star
11

obkv-table-client-java

OBKV Table Client is Java Library that can be used to access table data from OceanBase storage layer.
Java
19
star
12

obkv-table-client-rs

OBKV Table Client is Rust Library that can be used to access table data from OceanBase storage layer. Its access method is different from JDBC, it skips the SQL parsing layer, so it has significant performance advantage.
Rust
16
star
13

odc-client

OceanBase Developer Center Client
TypeScript
16
star
14

obagent

An agent client that provides operation and data collecting interface for OceanBase
Go
15
star
15

obkv-table-client-go

Go
13
star
16

oceanbase-doc

12
star
17

oblogclient

A Java library to get commit log data from OceanBase.
Java
11
star
18

obkv-hbase-client-java

OBKV HBase Client is Java Library that can be used to access data from OceanBase by HBase-0.94 API.
Java
11
star
19

kernel-quickstart

9
star
20

ob-samples

Java
8
star
21

oceanbase-diagnostic-tool

OceanBase Diagnostic Tool is designed to help OceanBase users quickly gather necessary information and analyze the cause of the problem.
Python
8
star
22

oblogmsg

LogMessage is one of the output format of database incremental data
C++
8
star
23

obspark

Spark plugin for OceanBase
6
star
24

kernel-advanced

4
star
25

flink-connector-oceanbase

Apache Flink Connector for OceanBase.
Java
4
star
26

ob-connector-odbc

C
4
star
27

sql-lifecycle-management

SQL-Lifecycle-Management is an intelligent diagnosis and optimization product focusing on the SQL field.
Python
3
star
28

ob-deps

Shell
3
star
29

tutorials-doc

3
star
30

oceanbase-proxy-doc

2
star
31

ocp-doc

OceanBase Control Platform(OCP) Document
2
star
32

.github

Community health files for the @oceanbase organization.
2
star
33

odc-doc

2
star
34

benchmarksql

Java
2
star
35

LCL

It's source code of the LCL algorithm, which is a Lock Chain Length-based Distributed Algorithm for Deadlock Detection and Resolution.
C++
2
star
36

oceanbase-connector-c-doc

1
star
37

code-guide-doc

1
star
38

obdumper-loader-doc

1
star
39

oms-doc

1
star
40

devcon

HCL
1
star