MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
|
缓存运行时产生的日志对象 更多...
#include <clog.h>
Public 成员函数 | |
RC | append_log_record (CLogRecord *log_record) |
增加一条日志 更多... | |
RC | flush_buffer (CLogFile &log_file) |
将当前的日志都刷新到日志文件中 更多... | |
Private 成员函数 | |
RC | write_log_record (CLogFile &log_file, CLogRecord *log_record) |
将日志记录写入到日志文件中 更多... | |
Private 属性 | |
common::Mutex | lock_ |
加锁支持多线程并发写入 | |
std::deque< std::unique_ptr< CLogRecord > > | log_records_ |
当前等待刷数据的日志记录 | |
std::atomic_int32_t | total_size_ |
当前缓存中的日志记录的总大小 | |
缓存运行时产生的日志对象
当前的实现非常简单,没有采用其它数据库中常用的将日志序列化到二进制buffer, 管理二进制buffer的方法。这里仅仅把日志记录下来,放到链表中。如果达到一定量的日志, 或者日志数量超过某个阈值,就会调用flush_buffer将日志刷新到磁盘中。
RC CLogBuffer::append_log_record | ( | CLogRecord * | log_record | ) |
增加一条日志
如果当前的日志达到一定量,就会刷新数据
total_size_ 的计算没有考虑日志头
RC CLogBuffer::flush_buffer | ( | CLogFile & | log_file | ) |
将当前的日志都刷新到日志文件中
因为多线程访问与日志管理的问题,只能有一个线程调用此函数
log_file | 日志文件 |
|
private |
将日志记录写入到日志文件中
log_file | 日志文件,概念上来讲不一定是某个特定的文件 |
log_record | 要写入的日志记录 |