From ff0b7ea0ef959761f533618d805017711f623202 Mon Sep 17 00:00:00 2001 From: cqy123456 <39671710+cqy123456@users.noreply.github.com> Date: Fri, 25 Oct 2024 15:55:28 +0800 Subject: [PATCH] enhance: build interim index for mmapped vector in ChunkedSealedSegment (#36993) issue:https://github.com/milvus-io/milvus/issues/36392 related pr: https://github.com/milvus-io/milvus/pull/36391 Signed-off-by: cqy123456 --- .../src/segcore/ChunkedSegmentSealedImpl.cpp | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp b/internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp index 9987347f3f..532447248d 100644 --- a/internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp +++ b/internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp @@ -617,6 +617,11 @@ ChunkedSegmentSealedImpl::MapFieldData(const FieldId field_id, mmap_fields_.insert(field_id); } + { + std::unique_lock lck(mutex_); + update_row_count(num_rows); + } + auto ok = unlink(filepath.c_str()); AssertInfo(ok == 0, fmt::format("failed to unlink mmap data file {}, err: {}", @@ -631,8 +636,19 @@ ChunkedSegmentSealedImpl::MapFieldData(const FieldId field_id, insert_record_.seal_pks(); } - std::unique_lock lck(mutex_); - set_bit(field_data_ready_bitset_, field_id, true); + bool use_interim_index = false; + if (generate_interim_index(field_id)) { + std::unique_lock lck(mutex_); + // mmap_fields is useless, no change + fields_.erase(field_id); + set_bit(field_data_ready_bitset_, field_id, false); + use_interim_index = true; + } + + if (!use_interim_index) { + std::unique_lock lck(mutex_); + set_bit(field_data_ready_bitset_, field_id, true); + } } void @@ -2115,9 +2131,14 @@ ChunkedSegmentSealedImpl::generate_interim_index(const FieldId field_id) { bool is_sparse = field_meta.get_data_type() == DataType::VECTOR_SPARSE_FLOAT; + bool enable_growing_mmap = storage::MmapManager::GetInstance() + .GetMmapConfig() + .GetEnableGrowingMmap(); + auto enable_binlog_index = [&]() { - // checkout config - if (!segcore_config_.get_enable_interim_segment_index()) { + // check milvus config + if (!segcore_config_.get_enable_interim_segment_index() || + enable_growing_mmap) { return false; } // check data type