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
61 RC init(const char *name, const char *dbpath, const char *trx_kit_name, const char *log_handler_name,
62 const char *storage_engine = "heap");
63
70 RC create_table(const char *table_name, span<const AttrInfoSqlNode> attributes, const vector<string> &primary_keys,
71 const StorageFormat storage_format = StorageFormat::ROW_FORMAT);
72
76 Table *find_table(const char *table_name) const;
80 Table *find_table(int32_t table_id) const;
81
83 const char *name() const;
84
86 void all_tables(vector<string> &table_names) const;
87
92 RC sync();
93
96
99
101 TrxKit &trx_kit();
102
103 string path() const { return path_; }
104
105 oceanbase::ObLsm *lsm() { return lsm_; }
106
107private:
109 RC open_all_tables();
111 RC recover();
112
114 RC init_meta();
116 RC flush_meta();
117
120
121 StorageEngine get_storage_engine()
122 {
123 StorageEngine engine = StorageEngine::UNKNOWN_ENGINE;
124 if (storage_engine_.length() == 0) {
125 engine = StorageEngine::HEAP;
126 } else if (0 == strcasecmp(storage_engine_.c_str(), "heap")) {
127 engine = StorageEngine::HEAP;
128 } else if (0 == strcasecmp(storage_engine_.c_str(), "lsm")) {
129 engine = StorageEngine::LSM;
130 } else {
131 engine = StorageEngine::UNKNOWN_ENGINE;
132 }
133 return engine;
134 }
135
136private:
137 string name_;
138 string path_;
139 unordered_map<string, Table *> opened_tables_;
140 unique_ptr<BufferPoolManager> buffer_pool_manager_;
141 unique_ptr<LogHandler> log_handler_;
142 unique_ptr<TrxKit> trx_kit_;
144
146 int32_t next_table_id_ = 0;
147
149 string storage_engine_;
150};
BufferPool的管理类
Definition: disk_buffer_pool.h:323
一个DB实例负责管理一批表
Definition: db.h:46
RC open_all_tables()
打开所有的表。在数据库初始化的时候会执行
Definition: db.cpp:198
LogHandler & log_handler()
获取当前数据库的日志处理器
Definition: db.cpp:415
string name_
数据库名称
Definition: db.h:137
oceanbase::ObLsm * lsm_
当前数据库的 LSM-Tree 存储引擎
Definition: db.h:143
RC init_dblwr_buffer()
初始化数据库的double buffer pool
Definition: db.cpp:403
unique_ptr< TrxKit > trx_kit_
当前数据库的事务管理器
Definition: db.h:142
RC init_meta()
初始化元数据。在数据库初始化的时候,加载元数据
Definition: db.cpp:318
unordered_map< string, Table * > opened_tables_
当前所有打开的表
Definition: db.h:139
BufferPoolManager & buffer_pool_manager()
获取当前数据库的buffer pool管理器
Definition: db.cpp:416
unique_ptr< BufferPoolManager > buffer_pool_manager_
当前数据库的buffer pool管理器
Definition: db.h:140
RC flush_meta()
刷新数据库的元数据到磁盘中。每次执行sync时会执行此操作
Definition: db.cpp:358
RC create_table(const char *table_name, span< const AttrInfoSqlNode > attributes, const vector< string > &primary_keys, const StorageFormat storage_format=StorageFormat::ROW_FORMAT)
创建一个表
Definition: db.cpp:153
LSN check_point_lsn_
当前数据库的检查点LSN。会记录到磁盘中。
Definition: db.h:148
TrxKit & trx_kit()
获取当前数据库的事务管理器
Definition: db.cpp:417
RC init(const char *name, const char *dbpath, const char *trx_kit_name, const char *log_handler_name, const char *storage_engine="heap")
初始化一个数据库实例
Definition: db.cpp:52
string path_
数据库文件存放的目录
Definition: db.h:138
const char * name() const
当前数据库的名称
Definition: db.cpp:237
unique_ptr< LogHandler > log_handler_
当前数据库的日志处理器
Definition: db.h:141
Table * find_table(const char *table_name) const
根据表名查找表
Definition: db.cpp:179
void all_tables(vector< string > &table_names) const
列出所有的表
Definition: db.cpp:239
RC recover()
恢复数据。在数据库初始化的时候运行。
Definition: db.cpp:285
int32_t next_table_id_
给每个table都分配一个ID,用来记录日志。这里假设所有的DDL都不会并发操作,所以相关的数据都不上锁
Definition: db.h:146
RC sync()
将所有内存中的数据,刷新到磁盘中。
Definition: db.cpp:246
对外提供服务的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:29