MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
Public 成员函数 | Private 成员函数 | Private 属性 | 所有成员列表
Db类 参考

一个DB实例负责管理一批表 更多...

#include <db.h>

Public 成员函数

RC init (const char *name, const char *dbpath, const char *trx_kit_name, const char *log_handler_name)
 初始化一个数据库实例 更多...
 
RC create_table (const char *table_name, span< const AttrInfoSqlNode > attributes, const StorageFormat storage_format=StorageFormat::ROW_FORMAT, const StorageEngine storage_engine=StorageEngine::HEAP)
 创建一个表 更多...
 
Tablefind_table (const char *table_name) const
 根据表名查找表
 
Tablefind_table (int32_t table_id) const
 根据表ID查找表
 
const char * name () const
 当前数据库的名称
 
void all_tables (vector< string > &table_names) const
 列出所有的表
 
RC sync ()
 将所有内存中的数据,刷新到磁盘中。 更多...
 
LogHandlerlog_handler ()
 获取当前数据库的日志处理器
 
BufferPoolManagerbuffer_pool_manager ()
 获取当前数据库的buffer pool管理器
 
TrxKittrx_kit ()
 获取当前数据库的事务管理器
 
string path () const
 
oceanbase::ObLsmlsm ()
 

Private 成员函数

RC open_all_tables ()
 打开所有的表。在数据库初始化的时候会执行
 
RC recover ()
 恢复数据。在数据库初始化的时候运行。
 
RC init_meta ()
 初始化元数据。在数据库初始化的时候,加载元数据
 
RC flush_meta ()
 刷新数据库的元数据到磁盘中。每次执行sync时会执行此操作
 
RC init_dblwr_buffer ()
 初始化数据库的double buffer pool
 

Private 属性

string name_
 数据库名称
 
string path_
 数据库文件存放的目录
 
unordered_map< string, Table * > opened_tables_
 当前所有打开的表
 
unique_ptr< BufferPoolManagerbuffer_pool_manager_
 当前数据库的buffer pool管理器
 
unique_ptr< LogHandlerlog_handler_
 当前数据库的日志处理器
 
unique_ptr< TrxKittrx_kit_
 当前数据库的事务管理器
 
oceanbase::ObLsmlsm_
 当前数据库的 LSM-Tree 存储引擎
 
int32_t next_table_id_ = 0
 给每个table都分配一个ID,用来记录日志。这里假设所有的DDL都不会并发操作,所以相关的数据都不上锁
 
LSN check_point_lsn_ = 0
 当前数据库的检查点LSN。会记录到磁盘中。
 

详细描述

一个DB实例负责管理一批表

当前DB的存储模式很简单,一个DB对应一个目录,所有的表和数据都放置在这个目录下。 启动时,从指定的目录下加载所有的表和元数据。 一个DB实例会有一个BufferPoolManager,用来管理所有的数据页,以及一个LogHandler,用来管理所有的日志。 这样也就约束了事务不能跨DB。buffer pool的内存管理控制也不能跨越Db。 也可以使用MiniOB非常容易模拟分布式事务,创建两个数据库,然后写一个分布式事务管理器。

NOTE: 数据库对象没有做完整的并发控制。比如在查找某张表的同时删除这个表,会引起访问冲突。这个控制是由使用者 来控制的。如果要完整的实现并发控制,需要实现表锁或类似的机制。

成员函数说明

◆ create_table()

RC Db::create_table ( const char *  table_name,
span< const AttrInfoSqlNode attributes,
const StorageFormat  storage_format = StorageFormat::ROW_FORMAT,
const StorageEngine  storage_engine = StorageEngine::HEAP 
)

创建一个表

参数
table_name表名
attributes表的属性
storage_format表的存储格式

◆ init()

RC Db::init ( const char *  name,
const char *  dbpath,
const char *  trx_kit_name,
const char *  log_handler_name 
)

初始化一个数据库实例

从指定的目录下加载指定名称的数据库。这里就会加载dbpath目录下的数据。

参数
name数据库名称
dbpath当前数据库放在哪个目录下
trx_kit_name使用哪种类型的事务模型
注解
数据库不是放在dbpath/name下,是直接使用dbpath目录

◆ sync()

RC Db::sync ( )

将所有内存中的数据,刷新到磁盘中。

注意,这里也没有并发控制,需要由上层来保证当前没有正在进行的事务。


该类的文档由以下文件生成: