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

日志数据缓冲区 更多...

#include <log_buffer.h>

Public 成员函数

RC init (LSN lsn, int32_t max_bytes=0)
 
RC append (LSN &lsn, LogModule::Id module_id, vector< char > &&data)
 在缓冲区中追加一条日志
 
RC append (LSN &lsn, LogModule module, vector< char > &&data)
 
RC flush (LogFileWriter &file_writer, int &count)
 刷新缓冲区中的日志到磁盘 更多...
 
int64_t bytes () const
 当前缓冲区中有多少字节的日志
 
int32_t entry_number () const
 当前缓冲区中有多少条日志
 
LSN current_lsn () const
 
LSN flushed_lsn () const
 

Private 属性

mutex mutex_
 
deque< LogEntryentries_
 当前数据结构一定会在多线程中访问,所以强制使用有效的锁,而不是有条件生效的common::Mutex
 
atomic< int64_t > bytes_
 日志缓冲区
 
atomic< LSN > current_lsn_ {0}
 当前缓冲区中的日志数据大小
 
atomic< LSN > flushed_lsn_ {0}
 
int32_t max_bytes_ = 4 * 1024 * 1024
 

详细描述

日志数据缓冲区

缓存一部分日志在内存中而不是直接写入磁盘。 这里的缓存没有考虑高性能操作,比如使用预分配内存、环形缓冲池等。 在生产数据库中,通常会使用预分配内存形式的缓存来提高性能,并且可以减少内存碎片。

成员函数说明

◆ append()

RC LogEntryBuffer::append ( LSN &  lsn,
LogModule  module,
vector< char > &&  data 
)

控制当前buffer使用的内存 简单粗暴,强制原地等待 但是如果当前想要新插入的日志比较大,不会做控制。所以理论上容纳的最大buffer内存是2*max_bytes_

◆ flush()

RC LogEntryBuffer::flush ( LogFileWriter file_writer,
int &  count 
)

刷新缓冲区中的日志到磁盘

参数
file_handle使用它来写文件
count刷了多少条日志

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