事务日志记录(TL)
SmartEDB 事务日志记录为 SmartEDB 增添了三项重要功能:
- 用于在出现故障时恢复 SmartEDB 内存数据库
- 用于“数据中继”,以促进 SmartEDB 应用程序与外部系统之间无缝、细粒度的数据共享
- 用于创建事件的持久队列
概述
事务日志记录通常指的是数据库日志文件处理。SmartEDB 事务日志记录(TL)主要用于一系列任务,其中一项任务是为内存数据库添加持久性。主要用于从某一时间点重放日志以及与外部环境(数据中继)通信数据库事务。通常称之为数据变更捕获(Change Data Capture,CDC)。因此,SmartEDB TL为内存数据库的持久性增加了更多选择,也提供了三项重要的功能:
- 在出现故障时,可用于 SmartEDB 内存数据库的恢复。事务日志记录是一种在对数据库进行更改(通过事务)时,将所做的更改记录到日志中的方法。启用事务日志记录后,SmartEDB 运行时会捕获数据库更改,并将其写入一个称为事务日志的文件中。在出现硬件或软件故障的情况下,运行时可以使用此日志恢复数据库。
- 可作为数据中继,以促进 SmartEDB 应用程序与外部系统之间无缝的数据共享;
- 用于创建事件的持久队列;
事务日志记录通过TL应用程序接口为 SmartEDB 全内存型和混合型(包含瞬态类和持久类)数据库提供持久性。在启用 TL 的应用程序中,事务中的每个插入/更新/删除操作都会记录在内存缓冲区中。当事务提交时,这些缓冲区会被添加到事务日志中。如果事务为只读事务或被中止,则不会向日志添加任何记录。
对于全内存数据库而言,事务日志记录不会改变内存架构,而且其性能优势仍高于基于持久性介质的数据库。读取性能不受事务日志记录的影响,而写入性能将远远超过传统基于持久性介质的数据库的写入性能。原因很简单:
- SmartEDB 事务日志记录要求每个数据库事务对文件系统进行一次写入操作。
- 写入是顺序进行的,并且不存在与维护缓存和/或缓存查找相关的开销。
然而,基于持久性介质的数据库在每次事务处理中会执行大量的读写操作(数据页、索引页、事务日志等),而且事务规模越大、修改的索引越多,所需的读写操作也就越多。
在 C/C++ 应用程序中,事务日志 API(TL API)会记录在调用 mco_translog_start()
和 mco_translog_stop()
函数之间提交到数据库的所有事务。因此,日志记录可以在应用程序的控制下开启和关闭。为了实现最高效率,日志文件以与文件系统页面对齐的块进行写入。启用 TL 应用程序还有一个额外的要求,即数据库模式必须声明一个自动对象标识符(auto_oid)(请参阅 TL应用程序的DDL 要求)。
事务日志(TL)设施对内存模式(常规或共享)以及事务管理器(MURSIW、独占或 MVCC)均无偏好。而且,当为数据中继或事件处理使用事务日志记录时,它也不关心数据库是临时的、持久的还是混合的。
以下主题阐述了事务日志应用程序设计和实现的一般原则:
主题 | 说明 |
---|---|
事务日志应用 | 在应用程序中启用事务日志记录 |
数据中继与持久事件队列策略及实现 | 策略及实施详情 |
高可用性和集群的事务日志 | 与高可用性和集群应用程序一起使用 |
动态DDL的事务日志记录 | 对用于创建、修改或删除表和索引的 SQL 数据定义语言(DDL)操作的支持 |
SDK示例
请使用以下链接查看适用于您的开发环境的 SDK 示例:
开发语言 | 说明 |
---|---|
C / C++ | C /C++ 语言中的事务日志记录示例 |
Java | Java 语言中的事务日志记录示例 |
C# | C# 语言中的事务日志记录示例 |