4 Star 12 Fork 2

OceanBase / oblogmsg

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

oblogmsg 是一种数据库增量数据的输出格式,oceanbase 的增量采集模块 liboblog 正是使用的这种消息格式来输出增量数据,oblogmsg 支持 oceanbase 中不同数据类型的增量数据的写入,具有序列化和反序列化的能力。

如何使用 oblogmsg

前置条件

  • cmake: >=3.20.0
  • g++: 支持 C++11 标准

以源码方式依赖(推荐方式)

  • 可以使用 git submodule 的方式将 oblogmsg 作为主项目的子模块
  • 在主项目的 CMakeLists.txt 文件中使用 add_subdirectory(submodule_path_to_oblogmsg) 来依赖 oblogmsg,该命令执行后将提供 oceanbase::oblogmsg_sharedoceanbase::oblogmsg_static 两个 targets
  • 在主项目相关 CMakeLists.txt 文件中,对于要依赖 oblogmsg 的 target t1,使用 target_link_libraries(t1 PRIVATE oceanbase::oblogmsg_shared)或者 target_link_libraries(t1 PRIVATE oceanbase::oblogmsg_static)即可

依赖编译后的 oblogmsg 库

  • 编译、安装 oblogmsg
# 编译 oblogmsg
git clone https://github.com/oceanbase/oblogmsg.git
mkdir oblogmsg-build
cd oblogmsg-build
cmake -S ../oblogmsg -B .
cmake --build .

# 本地安装
cmake --install . --prefix=${OBLOGMSG_INSTALL_PATH}
  • 主项目中依赖编译、安装后的 oblogmsg
    • 在主项目 CMakeLists.txt 文件中使用 set(CMAKE_PREFIX_PATH $ENV{OBLOGMSG_INSTALL_PATH} ${CMAKE_PREFIX_PATH}) 设置 oblogmsg 库搜索路径
    • 然后使用 find_package(oblogmsg REQUIRED)使加载 oblogmsg,该命令执行成功后将提供 oceanbase::oblogmsg_sharedoceanbase::oblogmsg_static 两个 targets
    • 在主项目相关 CMakeLists.txt 文件中,对于要依赖 oblogmsg 的 target t1,使用 target_link_libraries(t1 PRIVATE oceanbase::oblogmsg_shared)或者 target_link_libraries(t1 PRIVATE oceanbase::oblogmsg_static)即可

oblogmsg 部分接口说明

创建一个 record

 1. void ILogRecord::setSrcType(int type)
    功能描述:
        设置数据源的类型
    参数:
        type  有效值有0x00,0x01,0x02,0x03,0x04,0x05,对应数据源分别是 MYSQL,OCEANBASE,HBASE,ORACLE,OCEANBASE_1_0,DB2,liboblog 设置的值是0x04,即数据源是 OCEANBASE_1_0 
    返回值:
        无返回值

 2. void ILogRecord::setCheckpoint(uint64_t file, uint64_t offset)
    功能描述:
        设置当前的分析位点信息
    参数:
        file 一个秒级的 unix 时间戳
        offset file 参数中 unix 时间戳的微秒级
    返回值:
        无返回值

 3. int ILogRecord::setRecordType(int aType)
    功能描述:
        设置一条 record 的操作类型
    参数:
        aType 一般有七种类型 插入操作0x00 (EINSERT),更新操作0x01 (EUPDATE),删除操作0x02 (EDELETE),心跳包0x04 (HEARTBEAT),事物开始0x06 (EBEGIN),事物提交0x07 (ECOMMIT), DDL 操作0x08 (EDDL)
    返回值:
        固定返回0

 4. void ILogRecord::setDbname(const char *dbname)
    功能描述:
        设置一条 record 来源的 db 名字
    参数:
        dbname record 的来源的数据库名字
    返回值:
        无返回值

 5. void ILogRecord::setTbname(const char *tbname)
    功能描述:
        设置一条 record 的 table 名字
    参数:
        dbname record 的表名
    返回值:
        无返回值

 6. void ILogRecord::setTableMeta(ITableMeta* tblMeta)
    功能描述:
        设置一个 record 的元数据信息
    参数:
        tblMeta record 的元数据信息,内存需由调用方申请和释放
    返回值:
        无返回值

 7. void ITableMeta::setName(const char* name)
    功能描述:
        设置元数据中的表名字
    参数:
        name 表的名字
    返回值:
        无返回值

 8. void ITableMeta::setUKs(const char* uks)
    功能描述:
        设置元数据中的UK字段名字
    参数:
        uks 包含有 uk 字段的名字的字符串,格式为 (col1,col2,col3...),当有多个 uk 时,例如 (col1,col2),(col2,col3),需要合并成一个字符串 (col1,col2,col3) 传入
    返回值:
        无返回值

 9. void ITableMeta::setPKs(const char* pks)
    功能描述:
        设置元数据中的 PK 字段名字
    参数:
        pks 包含 pk 字段的名字的一个字符串,格式为 (col1,col2,col3...)
    返回值:
        无返回值

10. void ITableMeta::setPkinfo(const char* info)
    功能描述:
       设置元数据中的 PK 字段 id
    参数:
        info 包含有 pk 字段 id 的一个字符串,格式为(0,1,2,3...),从0开始
    返回值:
        无返回值

11. void ITableMeta::setUkinfo(const char* info)
    功能描述:
        设置元数据中的 UK 字段 id
    参数: 
        info 包含有 uk 字段 id 的一个字符串,格式为(0,1,2,3...),当有多个uk时,传入格式为(0,1),(1,2),(0,3)...
    返回值:
        无返回值

12. int ITableMeta::append(const char* colName, IColMeta* colMeta);
    功能描述:
        向一个表的元数据信息添加一个列的元数据信息
    参数:
        colName 列的名字
        colMeta 列的元数据信息
    返回值:
        -1 此列名在表中已存在时,添加会失败,返回-1
        0 添加成功

13. void IColMeta::setName(const char* name)
    功能描述:
        为一个列的元数据信息设置列名
    参数:
        name 此列的名字
    返回值:
        无返回值

14. void IColMeta::setType(int type)
    功能描述:
        设置列的类型
    参数:
        type 列的类型,可设置的值详见 include/MetaInfo.h 中的枚举类型 logmsg_field_types
    返回值:
        无返回值

15. void IColMeta::setLength(long length)
    功能描述:
        设置列的字节长度
    参数:
        length 该列的字节长度
    返回值:
        无返回值

16. void IColMeta::setIsPK(bool b)
    功能描述:
        设置该列是否时 pk
    参数:
        b  设置为 true 时,该列为 uk,false 时,该列不是 uk
    返回值:
        无返回值

17. void IColMeta::setIsUK(bool b)
    功能描述:
        设置该列是否时uk
    参数:
        b  设置为 true 时,该列为 uk,false 时,该列不是 uk
    返回值:
        无返回值

18. void IColMeta::setNotNull(bool b)
    功能描述:
        设置该列是否有非空约束
    参数:
        b  设置为 true 时,该列不能为空,false 时,该列可以为空
    返回值:
        无返回值

19. void ILogRecord::setOldColumn(BinLogBuf* buf, int size)
    功能描述:
        初始化一片空间用来存放前镜像的字段值,空间大小为 size 个 BinLogBuf 的大小,size 必须比大于等于表的字段数目,该空间由调用方申请和释放
    参数:
        buf 空间的首地址
        size 空间中 BinLogBuf 的个数,一般为表的字段数目
    返回值:
         无返回值

20. void ILogRecord::setNewColumn(BinLogBuf* buf, int size)
    功能描述:
        初始化一片空间用来存放后镜像的字段值,空间大小为 size 个 BinLogBuf 的大小,size 必须比大于等于表的字段数目,该空间由调用方申请和释放
    参数:
        buf 空间的首地址
        size 空间中 BinLogBuf 的个数,一般为表的字段数目
    返回值:
         无返回值

21. int ILogRecord::putOld(const char* pos, int len)
    功能描述:
        添加一个前镜像中字段的值到 record 中
    参数:
        pos 字段值的起始地址
        len 字段值的长度
    返回值:
        固定返回0
22. int ILogRecord::putNew(const char* pos, int len)
    功能描述:
        添加一个后镜像中字段的值到 record 中
    参数:
        pos 字段值的起始地址
        len 字段值的长度
    返回值:
        固定返回0

23. const char* ILogRecord::toString(size_t *size, bool reserveMemory)
    功能描述:
        序列化一个record
    参数:
        size 一个 size_t 类型的地址,序列化完成后,会将序列化后数据的长度写入该地址
        reserveMemory 是否保留序列化之后的数据到 record 的数据区,若不保留,改 record 在序列化之后,里面所存储的数据会被清空,将不可用
    返回值:
        NULL 序列化失败
        非空指针 序列化之后的数据首地址

24. ILogRecord::bool parsedOK()
    功能描述:
        获取一个 record 是否已经完成序列化
    参数:

    返回值:
        true 此 record 已经完成序列化,或者此 record 是由一段数据反序列化后创建的
        false 此 record 还未进行序列化

反序列化一个 record,或者从一个已经序列化过的 record 中( ILogRecord::parsedOK() 返回 true )解析数据

 1. int ILogRecord::parse(const void* ptr, size_t size)
    功能描述:
        反序列化一个 record
    参数:
        ptr  保存着序列化数据的首地址
        size 序列化数据的长度
    返回值:
        0 成功
        其他值 失败

 2. int ILogRecord::getSrcType()
    功能描述:
        获取数据源的类型
    参数:

    返回值:
        返回一个int型数值,有效值有0x00,0x01,0x02,0x03,0x04,0x05,对应数据源分别是 MYSQL,OCEANBASE,HBASE,ORACLE,OCEANBASE_1_0,DB2,liboblog 设置的值是0x04,即数据源是 OCEANBASE_1_0

 3. uint64_t ILogRecord::getCheckpoint1()/uint64_t ILogRecord::getCheckpoint2()
    功能描述:
        获取分析的位点信息
    参数:

    返回值:
        getCheckpoint1:返回一个秒级的 unix 时间戳
        getCheckpoint2:返回 unix 时间戳的微秒级,可利用 getCheckpoint1*1000000+getCheckpoint2 做为分析的断点位置

 4. int ILogRecord::recordType()
    功能描述:
        获取一条 record 的操作类型
    参数:

    返回值:
        返回一个int类型数值,一般有七种类型,插入操作0x00 (EINSERT),更新操作0x01 (EUPDATE),删除操作0x02 (EDELETE),心跳包0x04 (HEARTBEAT),事物开始0x06 (EBEGIN),事物提交0x07 (ECOMMIT),DDL 操作0x08 (EDDL)

 5. const char* ILogRecord::dbname() const
    功能描述:
        获取一条 record 来源的 db 名字
    参数:

    返回值:
        返回一个char*类型的指针,该指针指向 record 的来源的数据库名字

 6. const char* ILogRecord::tbname() const
    功能描述:
        获取一条 record 的 table 名字
    参数:

    返回值:
        返回一个 char* 类型的指针,该指针指向 record 的来源的表名字

 7. int ILogRecord::getTableMeta(ITableMeta*& tblMeta)
    功能描述:
        从一个 record 获取表的元数据信息,从一个序列化过的 record 取值时,由调用方为 tblMeta 申请和释放内存
    参数:
        tblMeta 表元数据信息的首地址
    返回值:
        0 成功
        其他值 失败

 8. const char* ITableMeta::getName()
    功能描述:
        获取元数据中的表名字
    参数:
        name 表的名字
    返回值:
        返回一个 char* 类型的指针,该指针指向 record 的元数据中的表名字

 9. const char* ITableMeta::getUKs()
    功能描述:
        获取元数据中的 UK 字段名字
    参数:

    返回值:
        返回一个 char* 指针,指向包含有 uk 字段的名字的字符串,格式为 (col1,col2,col3...)

10. const char* ITableMeta::getPKs()
    功能描述:
        获取元数据中的 PK 字段名字
    参数:

    返回值:
        返回一个 char* 指针,指向包含 pk 字段的名字的一个字符串,格式为 (col1,col2,col3...)

11. const char* ITableMeta::getPkinfo()
    功能描述:
        获取元数据中的 PK 字段 id,从0开始
    参数:

    返回值:
        返回一个 char* 指针,指向包含有 pk 字段 id 的一个字符串,格式为 (0,1,2,3...)

12. const char* ITableMeta::getUkinfo()
    功能描述:
        设置元数据中的 PK 字段 id,从0开始
    参数:

    返回值:
        返回一个 char* 指针,指向包含有 uk 字段 id 的一个字符串,格式为(0,1,2,3...)

13. int ITableMeta::getColCount()
    功能描述:
        获取元数据中的字段数量
    参数:

    返回值:
        返回字段的数量

14. const char* IColMeta::getName()
    功能描述:
        获取一个列的元数据中的列名
    参数:

    返回值:
        返回一个 char* 指针,指向元数据的列名

15. int IColMeta::getType()
    功能描述:
        获取列的类型
    参数:

    返回值:
        返回一个 int 型数值,详见 include/MetaInfo.h 中的枚举类型 logmsg_field_types

16. long IColMeta::getLength()
    功能描述:
        获取列的字节长度
    参数:

    返回值:
        列的字节长度

17. bool IColMeta::isPK()
    功能描述:
        获取该列是否时 pk
    参数:

    返回值:
        返回一个 bool 类型,为 true 时,该列为 uk,false 时,该列不是 uk

18. bool IColMeta::isUK()
    功能描述:
        获取该列是否时 uk
    参数:

    返回值:
        返回一个 bool 类型,为 true 时,该列为 uk,false 时,该列不是 uk

19. bool IColMeta::isNotNull()
    功能描述:
        获取该列是否有非空约束
    参数:

    返回值:
        返回一个 bool 类型,为 true 时,该列有非空约束,false 时,该列可以为空

20. StrArray* ILogRecord::parsedOldCols() const
    功能描述:
        获取 record 中前镜像的所有字段值
    参数:

    返回值:
        返回一个 StrArray 类型的指针,该指针指向存着前镜像的值,可通过 StrArray->size() 接口获取数据的列数,StrArray->elementAt(int i, const char*& s, size_t& length) 接口获取每列的数据

21. StrArray* ILogRecord::parsedNewCols() const
    功能描述:
        获取 record 中后镜像的所有字段值
    参数:

    返回值:
        返回一个 StrArray 类型的指针,该指针指向存着后镜像的值,可通过 StrArray->size() 接口获取数据的列数,StrArray->elementAt(int i, const char*& s, size_t& length) 接口获取每列的数据

从一个未序列化过的 record 中( ILogRecord::parsedOK() 返回 false )解析前后镜像字段的数据

 1. int ILogRecord::getTableMeta(ITableMeta*& tblMeta)
    功能描述:
        从一个 record 获取表的元数据信息,从一个未序列化过的 record 取值时,tblMeta 必须为一个空指针
    参数:
        tblMeta 需为一个空指针,该接口会将此指针指向 record 的元数据地址,内存由 oblogmsg 管理,调用方不需要释放
    返回值:
        0 成功
        其他值 失败

 2. BinLogBuf* ILogRecord::newCols(unsigned int& count)
    功能描述:
        获取 record 中后镜像的所有字段值
    参数:
        count 用来返回数据的列数
    返回值:
        返回一个 BinLogBuf 类型的指针,该指针指向一个拥有 count 个 BinLogBuf 的空间,每个 BinLogBuf.buf 成员即是字段的值,BinLogBuf.buf_used_size 为字段值的长度

 3. BinLogBuf* ILogRecord::oldCols(unsigned int& count)
    功能描述:
        获取 record 中后镜像的所有字段值
    参数:
        count 用来返回数据的列数
    返回值:
        返回一个 BinLogBuf 类型的指针,该指针指向一个拥有 count 个 BinLogBuf 的空间,每个 BinLogBuf.buf 成员即是字段的值,BinLogBuf.buf_used_size 为字段值的长度

空文件

简介

LogMessage是一种数据库增量数据的输出格式,oceanbase的增量采集模块liboblog正是使用的这种消息格式来输出增量数据,LogMessage支持oceanbase中不同数据类型的增量数据的 写入,具有序列化和反序列化的能力。 展开 收起
C++ 等 4 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/oceanbase/oblogmsg.git
git@gitee.com:oceanbase/oblogmsg.git
oceanbase
oblogmsg
oblogmsg
master

搜索帮助