在 GaussDB 中,Ustore 和 Astore 是两种不同的存储引擎,它们各自有不同的特点和适用场景。以下是 Ustore 和 Astore 的主要区别:
Ustore 存储引擎
特点:
原位更新(In-place Update):Ustore 存储引擎将新旧版本的数据分开存储,最新版本的数据被存储在数据页上,而历史版本的数据则存储在单独的 Undo 空间中。这种设计可以有效减少数据页的空间膨胀,提高数据更新的效率
。 索引膨胀控制:由于新版本元组复用老版本元组的物理位置,索引无需更新,从而有效控制索引膨胀
。 独立的空间回收能力:Ustore 存储引擎支持独立的空间回收能力,索引与堆表解耦,可独立清理,IO 平稳度更优
。 闪回功能:Ustore 存储引擎支持闪回功能,可以快速回退人为误操作
。
适用场景:
频繁更新的业务场景:Ustore 存储引擎特别适用于频繁更新的业务场景,可以有效减少数据页和索引的空间膨胀,提高更新性能
。 OLTP 场景:Ustore 存储引擎在 OLTP 场景下表现出色,可以有效降低频繁更新导致的数据页空间膨胀和索引空间膨胀
。
Astore 存储引擎
特点:
追加更新(Append Update):Astore 存储引擎采用追加更新的方式,新旧版本元组混合存储在同一个数据页中。这种设计在处理插入、删除及 Hot-Update(同一页面内的更新)场景时表现出色
。 无回滚段:Astore 存储引擎没有回滚段,旧数据和最新版本的数据存储在一起。数据库 Crash 后重启时,不需要进行复杂的恢复
。 支持回收站功能:Astore 存储引擎支持回收站功能,可以进行闪回 Drop 和闪回 Truncate 操作
。 WAL 日志简单:Astore 存储引擎的 WAL 日志仅需记录数据文件的变化,不需要记录回滚段的变化
。
适用场景:
插入较多而更新较少的业务场景:Astore 存储引擎更适用于插入较多而更新较少的业务场景,可以有效减少更新操作的 I/O 开销
。 OLTP 场景:Astore 存储引擎在 OLTP 场景下也有较好的表现,特别是在处理插入、删除及 Hot-Update 场景时
。
总结
Ustore:适用于频繁更新的业务场景,可以有效减少数据页和索引的空间膨胀,提高更新性能。支持闪回功能和独立的空间回收能力
。 Astore:适用于插入较多而更新较少的业务场景,可以有效减少更新操作的 I/O 开销。支持回收站功能和无回滚段设计,数据库 Crash 后恢复简单
。
根据具体的业务需求和场景,可以选择合适的存储引擎以优化数据库性能。




