电信天翼云最近开源了OpenTeleDB,发布了XProxy、XStore、XRaft三大技术
XStore号称通过原位更新技术,把旧数据写入回滚段,垃圾集中进行清理回收,数据存储空间不再膨胀
还可消除对 Vacuum 的依赖,无需再为空间回收与事务冻结而进行频繁维护
那么我们就拿OpenTeleDB和GaussDB做个PK吧,看看OpenTeleDB的XSTORE和GaussDB的USTORE谁更强
OpenTeleDB
openteledb
postgres=# \d+
List of relations
Schema | Name | Type | Owner | Persistence | Access method | Size | Description
--------+----------+-------+----------+-------------+---------------+---------+-------------
public | t_xstore | table | postgres | permanent | xstore | 132 MB |
public | test | table | postgres | permanent | heap | 12 MB |
public | test01 | table | postgres | permanent | heap | 6104 MB |
(3 rows)
postgres=# \di+
List of relations
Schema | Name | Type | Owner | Table | Persistence | Access method | Size | Description
--------+-----------------+-------+----------+----------+-------------+---------------+--------+-------------
public | idx_t_xstore_n1 | index | postgres | t_xstore | permanent | xbtree | 49 MB |
public | idx_t_xstore_n2 | index | postgres | t_xstore | permanent | xbtree | 128 MB |
(2 rows)
在有长事务情况下,对表t_xstore update,delete,insert 30次
postgres=# \d+
List of relations
Schema | Name | Type | Owner | Persistence | Access method | Size | Description
--------+----------+-------+----------+-------------+---------------+---------+-------------
public | t_xstore | table | postgres | permanent | xstore | 4077 MB |
public | test | table | postgres | permanent | heap | 12 MB |
public | test01 | table | postgres | permanent | heap | 6104 MB |
(3 rows)
postgres=# \di+
List of relations
Schema | Name | Type | Owner | Table | Persistence | Access method | Size | Description
--------+-----------------+-------+----------+----------+-------------+---------------+---------+-------------
public | idx_t_xstore_n1 | index | postgres | t_xstore | permanent | xbtree | 1397 MB |
public | idx_t_xstore_n2 | index | postgres | t_xstore | permanent | xbtree | 6548 MB |
(2 rows)
表膨胀30.89倍
索引1膨胀28.5倍
索引2膨胀51.15倍
GaussDB
gaussdb
gaussdb=# \d+
List of relations
Schema | Name | Type | Owner | Size | Storage | Description
--------+----------+-------+---------+---------+-------------------------------------------------------------------------------------+-------------
public | t_ustore | table | gaussdb | 126 MB | {orientation=row,storage_type=ustore,compression=no,segment=off,parallel_workers=8} |
public | test01 | table | gaussdb | 5614 MB | {orientation=row,compression=no,storage_type=USTORE,segment=off} |
public | test02 | table | gaussdb | 11 MB | {orientation=row,compression=no,storage_type=USTORE,segment=off} |
(3 rows)
gaussdb=# \di+
List of relations
Schema | Name | Type | Owner | Table | Size | Storage | Description
--------+-----------------+-------+---------+----------+--------+-----------------------+-------------
public | idx_t_ustore_n1 | index | gaussdb | t_ustore | 37 MB | {storage_type=USTORE} |
public | idx_t_ustore_n2 | index | gaussdb | t_ustore | 118 MB | {storage_type=USTORE} |
(2 rows)
在有长事务情况下,对表t_ustore update,delete,insert 30次
gaussdb=# \d+
List of relations
Schema | Name | Type | Owner | Size | Storage | Description
--------+----------+-------+---------+---------+-------------------------------------------------------------------------------------+-------------
public | t_ustore | table | gaussdb | 553 MB | {orientation=row,compression=no,storage_type=USTORE,segment=off,parallel_workers=8} |
public | test01 | table | gaussdb | 5614 MB | {orientation=row,compression=no,storage_type=USTORE,segment=off} |
public | test02 | table | gaussdb | 11 MB | {orientation=row,compression=no,storage_type=USTORE,segment=off} |
(3 rows)
gaussdb=# \di+
List of relations
Schema | Name | Type | Owner | Table | Size | Storage | Description
--------+-----------------+-------+---------+----------+---------+-----------------------+-------------
public | idx_t_ustore_n1 | index | gaussdb | t_ustore | 1739 MB | {storage_type=USTORE} |
public | idx_t_ustore_n2 | index | gaussdb | t_ustore | 9176 MB | {storage_type=USTORE} |
(2 rows)
表膨胀4.3倍
索引1膨胀47倍
索引2膨胀77倍
结论:在有长事务情况下,OpenTeleDB表膨胀30倍+,GaussDB表膨胀4.3倍,在表膨胀方面GaussDB吊打OpenTeleDB,遥遥领先果然厉害。索引膨胀OpenTeleDB比Gaussdb好些,两款数据库都没解决索引膨胀。
OpenTeleDB的XSTORE是大概率是给超高频的单行update场景使用的,此类场景原生PG死翘翘