MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
db.h
1/* Copyright (c) 2021 Xie Meiyi(xiemeiyi@hust.edu.cn) and OceanBase and/or its affiliates. All rights reserved.
2miniob is licensed under Mulan PSL v2.
3You can use this software according to the terms and conditions of the Mulan PSL v2.
4You may obtain a copy of Mulan PSL v2 at:
5 http://license.coscl.org.cn/MulanPSL2
6THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
7EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
8MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
9See the Mulan PSL v2 for more details. */
10
11//
12// Created by Meiyi & Longda & Wangyunlai on 2021/5/12.
13//
14
15#pragma once
16
17#include "common/sys/rc.h"
18#include "common/lang/vector.h"
19#include "common/lang/string.h"
20#include "common/lang/unordered_map.h"
21#include "common/lang/memory.h"
22#include "common/lang/span.h"
23#include "sql/parser/parse_defs.h"
24#include "storage/buffer/disk_buffer_pool.h"
25#include "storage/clog/disk_log_handler.h"
26#include "storage/buffer/double_write_buffer.h"
27#include "oblsm/include/ob_lsm.h"
28
29class Table;
30class LogHandler;
32class TrxKit;
33
45class Db
46{
47public:
48 Db() = default;
49 ~Db();
50
59 RC init(const char *name, const char *dbpath, const char *trx_kit_name, const char *log_handler_name);
60
67 RC create_table(const char *table_name, span<const AttrInfoSqlNode> attributes,
68 const StorageFormat storage_format = StorageFormat::ROW_FORMAT,
69 const StorageEngine storage_engine = StorageEngine::HEAP);
70
74 Table *find_table(const char *table_name) const;
78 Table *find_table(int32_t table_id) const;
79
81 const char *name() const;
82
84 void all_tables(vector<string> &table_names) const;
85
90 RC sync();
91
94
97
99 TrxKit &trx_kit();
100
101 string path() const { return path_; }
102
103 oceanbase::ObLsm *lsm() { return lsm_; }
104
105private:
107 RC open_all_tables();
109 RC recover();
110
112 RC init_meta();
114 RC flush_meta();
115
118
119private:
120 string name_;
121 string path_;
122 unordered_map<string, Table *> opened_tables_;
123 unique_ptr<BufferPoolManager> buffer_pool_manager_;
124 unique_ptr<LogHandler> log_handler_;
125 unique_ptr<TrxKit> trx_kit_;
127
129 int32_t next_table_id_ = 0;
130
132};
BufferPool的管理类
Definition: disk_buffer_pool.h:322
一个DB实例负责管理一批表
Definition: db.h:46
RC open_all_tables()
打开所有的表。在数据库初始化的时候会执行
Definition: db.cpp:193
LogHandler & log_handler()
获取当前数据库的日志处理器
Definition: db.cpp:410
string name_
数据库名称
Definition: db.h:120
oceanbase::ObLsm * lsm_
当前数据库的 LSM-Tree 存储引擎
Definition: db.h:126
RC init_dblwr_buffer()
初始化数据库的double buffer pool
Definition: db.cpp:398
unique_ptr< TrxKit > trx_kit_
当前数据库的事务管理器
Definition: db.h:125
RC init(const char *name, const char *dbpath, const char *trx_kit_name, const char *log_handler_name)
初始化一个数据库实例
Definition: db.cpp:48
RC init_meta()
初始化元数据。在数据库初始化的时候,加载元数据
Definition: db.cpp:313
RC create_table(const char *table_name, span< const AttrInfoSqlNode > attributes, const StorageFormat storage_format=StorageFormat::ROW_FORMAT, const StorageEngine storage_engine=StorageEngine::HEAP)
创建一个表
Definition: db.cpp:147
unordered_map< string, Table * > opened_tables_
当前所有打开的表
Definition: db.h:122
BufferPoolManager & buffer_pool_manager()
获取当前数据库的buffer pool管理器
Definition: db.cpp:411
unique_ptr< BufferPoolManager > buffer_pool_manager_
当前数据库的buffer pool管理器
Definition: db.h:123
RC flush_meta()
刷新数据库的元数据到磁盘中。每次执行sync时会执行此操作
Definition: db.cpp:353
LSN check_point_lsn_
当前数据库的检查点LSN。会记录到磁盘中。
Definition: db.h:131
TrxKit & trx_kit()
获取当前数据库的事务管理器
Definition: db.cpp:412
string path_
数据库文件存放的目录
Definition: db.h:121
const char * name() const
当前数据库的名称
Definition: db.cpp:232
unique_ptr< LogHandler > log_handler_
当前数据库的日志处理器
Definition: db.h:124
Table * find_table(const char *table_name) const
根据表名查找表
Definition: db.cpp:174
void all_tables(vector< string > &table_names) const
列出所有的表
Definition: db.cpp:234
RC recover()
恢复数据。在数据库初始化的时候运行。
Definition: db.cpp:280
int32_t next_table_id_
给每个table都分配一个ID,用来记录日志。这里假设所有的DDL都不会并发操作,所以相关的数据都不上锁
Definition: db.h:129
RC sync()
将所有内存中的数据,刷新到磁盘中。
Definition: db.cpp:241
对外提供服务的CLog模块
Definition: log_handler.h:40
Definition: table.h:42
事务管理器
Definition: trx.h:99
ObLsm is a key-value storage engine for educational purpose. ObLsm learned a lot about design from le...
Definition: ob_lsm.h:27