From 48c1553c11f28890a094687d5f7051deac86a088 Mon Sep 17 00:00:00 2001 From: ivanmorozov333 Date: Sun, 8 Sep 2024 14:44:12 +0300 Subject: [PATCH 1/3] speed up column ids checkers and finder --- .../engines/portions/portion_info.h | 23 ++++++++++++------- .../scheme/versions/filtered_scheme.cpp | 8 +++---- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/ydb/core/tx/columnshard/engines/portions/portion_info.h b/ydb/core/tx/columnshard/engines/portions/portion_info.h index 34e871858aee..7e888d4e2132 100644 --- a/ydb/core/tx/columnshard/engines/portions/portion_info.h +++ b/ydb/core/tx/columnshard/engines/portions/portion_info.h @@ -338,22 +338,29 @@ class TPortionInfo { } const TColumnRecord* GetRecordPointer(const TChunkAddress& address) const { - for (auto&& i : Records) { - if (i.GetAddress() == address) { - return &i; - } + auto it = std::lower_bound(Records.begin(), Records.end(), address, [](const TColumnRecord& item, const TChunkAddress& address) { + return item.GetAddress() < address; + }); + if (it != Records.end() && it->GetAddress() == address) { + return &*it; } return nullptr; } bool HasEntityAddress(const TChunkAddress& address) const { - for (auto&& c : GetRecords()) { - if (c.GetAddress() == address) { + { + auto it = std::lower_bound(Records.begin(), Records.end(), address, [](const TColumnRecord& item, const TChunkAddress& address) { + return item.GetAddress() < address; + }); + if (it != Records.end() && it->GetAddress() == address) { return true; } } - for (auto&& c : GetIndexes()) { - if (c.GetAddress() == address) { + { + auto it = std::lower_bound(Indexes.begin(), Indexes.end(), address, [](const TColumnRecord& item, const TChunkAddress& address) { + return item.GetAddress() < address; + }); + if (it != Indexes.end() && it->GetAddress() == address) { return true; } } diff --git a/ydb/core/tx/columnshard/engines/scheme/versions/filtered_scheme.cpp b/ydb/core/tx/columnshard/engines/scheme/versions/filtered_scheme.cpp index f8ea532fadf6..552cc4f23edf 100644 --- a/ydb/core/tx/columnshard/engines/scheme/versions/filtered_scheme.cpp +++ b/ydb/core/tx/columnshard/engines/scheme/versions/filtered_scheme.cpp @@ -21,12 +21,12 @@ TFilteredSnapshotSchema::TFilteredSnapshotSchema(const ISnapshotSchema::TPtr& or } TColumnSaver TFilteredSnapshotSchema::GetColumnSaver(const ui32 columnId) const { - AFL_VERIFY(std::find(ColumnIds.begin(), ColumnIds.end(), columnId) != ColumnIds.end()); + AFL_VERIFY(IdIntoIndex.contains(columnId)); return OriginalSnapshot->GetColumnSaver(columnId); } std::shared_ptr TFilteredSnapshotSchema::GetColumnLoaderOptional(const ui32 columnId) const { - AFL_VERIFY(std::find(ColumnIds.begin(), ColumnIds.end(), columnId) != ColumnIds.end()); + AFL_VERIFY(IdIntoIndex.contains(columnId)); return OriginalSnapshot->GetColumnLoaderOptional(columnId); } @@ -35,7 +35,7 @@ std::optional TFilteredSnapshotSchema::GetColumnIdOptional(const std::stri if (!result) { return result; } - if (std::find(ColumnIds.begin(), ColumnIds.end(), *result) == ColumnIds.end()) { + if (!IdIntoIndex.contains(columnId)) { return std::nullopt; } return result; @@ -43,7 +43,7 @@ std::optional TFilteredSnapshotSchema::GetColumnIdOptional(const std::stri ui32 TFilteredSnapshotSchema::GetColumnIdVerified(const std::string& columnName) const { auto result = OriginalSnapshot->GetColumnIdVerified(columnName); - AFL_VERIFY(std::find(ColumnIds.begin(), ColumnIds.end(), result) != ColumnIds.end()); + AFL_VERIFY(IdIntoIndex.contains(columnId)); return result; } From 1d287bb7cd8d35c812a9caec095285bb2787f5c0 Mon Sep 17 00:00:00 2001 From: ivanmorozov333 Date: Sun, 8 Sep 2024 15:38:14 +0300 Subject: [PATCH 2/3] fix --- ydb/core/tx/columnshard/engines/portions/portion_info.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ydb/core/tx/columnshard/engines/portions/portion_info.h b/ydb/core/tx/columnshard/engines/portions/portion_info.h index 7e888d4e2132..b3d51b961186 100644 --- a/ydb/core/tx/columnshard/engines/portions/portion_info.h +++ b/ydb/core/tx/columnshard/engines/portions/portion_info.h @@ -357,7 +357,7 @@ class TPortionInfo { } } { - auto it = std::lower_bound(Indexes.begin(), Indexes.end(), address, [](const TColumnRecord& item, const TChunkAddress& address) { + auto it = std::lower_bound(Indexes.begin(), Indexes.end(), address, [](const TIndexChunk& item, const TChunkAddress& address) { return item.GetAddress() < address; }); if (it != Indexes.end() && it->GetAddress() == address) { From 0a5d9e9fc545d4ed0bda73c3c503ff69d566a885 Mon Sep 17 00:00:00 2001 From: ivanmorozov333 Date: Sun, 8 Sep 2024 19:48:09 +0300 Subject: [PATCH 3/3] fix build --- .../columnshard/engines/scheme/versions/filtered_scheme.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ydb/core/tx/columnshard/engines/scheme/versions/filtered_scheme.cpp b/ydb/core/tx/columnshard/engines/scheme/versions/filtered_scheme.cpp index 552cc4f23edf..a371806b2349 100644 --- a/ydb/core/tx/columnshard/engines/scheme/versions/filtered_scheme.cpp +++ b/ydb/core/tx/columnshard/engines/scheme/versions/filtered_scheme.cpp @@ -35,7 +35,7 @@ std::optional TFilteredSnapshotSchema::GetColumnIdOptional(const std::stri if (!result) { return result; } - if (!IdIntoIndex.contains(columnId)) { + if (!IdIntoIndex.contains(*result)) { return std::nullopt; } return result; @@ -43,7 +43,7 @@ std::optional TFilteredSnapshotSchema::GetColumnIdOptional(const std::stri ui32 TFilteredSnapshotSchema::GetColumnIdVerified(const std::string& columnName) const { auto result = OriginalSnapshot->GetColumnIdVerified(columnName); - AFL_VERIFY(IdIntoIndex.contains(columnId)); + AFL_VERIFY(IdIntoIndex.contains(result)); return result; }