From 7707a3e9f30a962955f3933ace87de7122a3f24e Mon Sep 17 00:00:00 2001 From: yuqi Date: Sat, 8 Mar 2025 10:54:41 +0800 Subject: [PATCH 1/2] Optimize method `listColumnPOsByTableIdAndVersion` to make it more efficient. --- .../mapper/provider/base/TableColumnBaseSQLProvider.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TableColumnBaseSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TableColumnBaseSQLProvider.java index d6154c907b6..ee098c9361f 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TableColumnBaseSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TableColumnBaseSQLProvider.java @@ -44,7 +44,8 @@ public String listColumnPOsByTableIdAndVersion( + TableColumnMapper.COLUMN_TABLE_NAME + " WHERE table_id = #{tableId} AND table_version <= #{tableVersion} AND deleted_at = 0" + " GROUP BY column_id) t2" - + " ON t1.column_id = t2.column_id AND t1.table_version = t2.max_table_version"; + + " ON t1.column_id = t2.column_id AND t1.table_version = t2.max_table_version" + + " AND table_id = #{tableId}"; } public String insertColumnPOs(@Param("columnPOs") List columnPOs) { From b0c9c0e29684b3460d72259bf0c1dedae76e8321 Mon Sep 17 00:00:00 2001 From: yuqi Date: Sat, 8 Mar 2025 22:17:36 +0800 Subject: [PATCH 2/2] Optimize method `listColumnPOsByTableIdAndVersion` to make it more efficient. --- core/build.gradle.kts | 1 + .../main/java/org/apache/gravitino/meta/TableEntity.java | 6 +++++- .../mapper/provider/base/TableColumnBaseSQLProvider.java | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index ef23950b07c..c5f92a6ed7d 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -33,6 +33,7 @@ dependencies { implementation(libs.commons.dbcp2) implementation(libs.commons.io) implementation(libs.commons.lang3) + implementation(libs.commons.collections4) implementation(libs.guava) implementation(libs.h2db) implementation(libs.mybatis) diff --git a/core/src/main/java/org/apache/gravitino/meta/TableEntity.java b/core/src/main/java/org/apache/gravitino/meta/TableEntity.java index 197eed6d33d..f9a2f5a17fb 100644 --- a/core/src/main/java/org/apache/gravitino/meta/TableEntity.java +++ b/core/src/main/java/org/apache/gravitino/meta/TableEntity.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import lombok.ToString; +import org.apache.commons.collections4.CollectionUtils; import org.apache.gravitino.Auditable; import org.apache.gravitino.Entity; import org.apache.gravitino.Field; @@ -131,11 +132,14 @@ public boolean equals(Object o) { } TableEntity baseTable = (TableEntity) o; + // Objects.equal() will judge the sequence of elements in the list. For example, if the + // sequence of columns is different, it will return false. So we need to use + // CollectionUtils.isEqualCollection() to compare the two lists. return Objects.equal(id, baseTable.id) && Objects.equal(name, baseTable.name) && Objects.equal(namespace, baseTable.namespace) && Objects.equal(auditInfo, baseTable.auditInfo) - && Objects.equal(columns, baseTable.columns); + && CollectionUtils.isEqualCollection(columns, baseTable.columns); } @Override diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TableColumnBaseSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TableColumnBaseSQLProvider.java index ee098c9361f..1ed117b8da9 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TableColumnBaseSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TableColumnBaseSQLProvider.java @@ -45,7 +45,7 @@ public String listColumnPOsByTableIdAndVersion( + " WHERE table_id = #{tableId} AND table_version <= #{tableVersion} AND deleted_at = 0" + " GROUP BY column_id) t2" + " ON t1.column_id = t2.column_id AND t1.table_version = t2.max_table_version" - + " AND table_id = #{tableId}"; + + " AND t1.table_id = #{tableId}"; } public String insertColumnPOs(@Param("columnPOs") List columnPOs) {