diff --git a/README.md b/README.md index ad727a4..b3e0afb 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ 🐦 X (Twitter)

-**Zvec** is an open-source, in-process vector database — lightweight, lightning-fast, and designed to embed directly into applications. Built on **Proxima** (Alibaba's battle-tested vector search engine), it delivers production-grade, low-latency, scalable similarity search with minimal setup. +**Zvec** is an open-source, in-process vector database — lightweight, lightning-fast, and designed to embed directly into applications. Battle-tested within Alibaba Group, it delivers production-grade, low-latency and scalable similarity search with minimal setup. > [!Important] > 🚀 **v0.3.1 (Apr 17, 2026)** diff --git a/src/db/collection.cc b/src/db/collection.cc index c554149..e75492b 100644 --- a/src/db/collection.cc +++ b/src/db/collection.cc @@ -624,10 +624,11 @@ Status CollectionImpl::execute_tasks( Status CollectionImpl::DropIndex(const std::string &column_name) { CHECK_COLLECTION_READONLY_RETURN_STATUS; - CHECK_DESTROY_RETURN_STATUS(destroyed_, false); std::lock_guard lock(schema_handle_mtx_); + CHECK_DESTROY_RETURN_STATUS(destroyed_, false); + auto new_schema = std::make_shared(*schema_); auto s = new_schema->drop_index(column_name); CHECK_RETURN_STATUS(s); @@ -1548,8 +1549,6 @@ Status CollectionImpl::DeleteByFilter(const std::string &filter) { CHECK_DESTROY_RETURN_STATUS(destroyed_, false); - auto segments = get_all_segments(); - VectorQuery query; query.filter_ = filter; query.topk_ = INT32_MAX; diff --git a/src/db/common/concurrent_roaring_bitmap.h b/src/db/common/concurrent_roaring_bitmap.h index 8d5f106..d1c6bd4 100644 --- a/src/db/common/concurrent_roaring_bitmap.h +++ b/src/db/common/concurrent_roaring_bitmap.h @@ -79,7 +79,8 @@ class ConcurrentRoaringBitmap32 { std::shared_lock lock(mutex_); uint64_t max_rank{0}, min_rank{0}; max_rank = roaring_bitmap_rank(bitmap_, max_doc_id); - min_rank = roaring_bitmap_rank(bitmap_, min_doc_id - 1); + min_rank = + min_doc_id == 0 ? 0 : roaring_bitmap_rank(bitmap_, min_doc_id - 1); return max_rank - min_rank; } diff --git a/src/db/common/error_code.cc b/src/db/common/error_code.cc index d24c9cd..df7211a 100644 --- a/src/db/common/error_code.cc +++ b/src/db/common/error_code.cc @@ -123,8 +123,10 @@ PROXIMA_ZVEC_ERROR_CODE_DEFINE(InvalidCollectionName, 2042, PROXIMA_ZVEC_ERROR_CODE_DEFINE(InvalidPartitionName, 2043, "Invalid partition name"); PROXIMA_ZVEC_ERROR_CODE_DEFINE(InvalidFieldName, 2044, "Invalid field name"); -PROXIMA_ZVEC_ERROR_CODE_DEFINE(InvalidChannelCount, 2045, "Invalid field name"); -PROXIMA_ZVEC_ERROR_CODE_DEFINE(InvalidReplicaCount, 2046, "Invalid field name"); +PROXIMA_ZVEC_ERROR_CODE_DEFINE(InvalidChannelCount, 2045, + "Invalid channel count"); +PROXIMA_ZVEC_ERROR_CODE_DEFINE(InvalidReplicaCount, 2046, + "Invalid replica count"); PROXIMA_ZVEC_ERROR_CODE_DEFINE(InvalidJson, 2047, "Invalid json"); // used by master PROXIMA_ZVEC_ERROR_CODE_DEFINE(InvalidClusterConfig, 2048, diff --git a/src/db/common/error_code.h b/src/db/common/error_code.h index 625cd66..71b7308 100644 --- a/src/db/common/error_code.h +++ b/src/db/common/error_code.h @@ -144,8 +144,6 @@ PROXIMA_ZVEC_ERROR_CODE_DECLARE(UnreadyQueue); PROXIMA_ZVEC_ERROR_CODE_DECLARE(ScheduleError); PROXIMA_ZVEC_ERROR_CODE_DECLARE(TaskIsRunning); -PROXIMA_ZVEC_ERROR_CODE_DECLARE(DirectoryAlreadyExists); -PROXIMA_ZVEC_ERROR_CODE_DECLARE(DirectoryNotExists); // 2000~2999 [Client Check] PROXIMA_ZVEC_ERROR_CODE_DECLARE(EmptyCollectionName); diff --git a/src/db/common/file_helper.h b/src/db/common/file_helper.h index 7be6090..95d5b2a 100644 --- a/src/db/common/file_helper.h +++ b/src/db/common/file_helper.h @@ -41,7 +41,7 @@ enum class FileID : uint32_t { /* * File name coresponding to file id */ -static const char *GetFileName(FileID t) { +inline const char *GetFileName(FileID t) { switch (t) { case FileID::ID_FILE: return "idmap"; diff --git a/src/db/common/rocbsdb_context.cc b/src/db/common/rocksdb_context.cc similarity index 100% rename from src/db/common/rocbsdb_context.cc rename to src/db/common/rocksdb_context.cc index 790456a..42867cc 100644 --- a/src/db/common/rocbsdb_context.cc +++ b/src/db/common/rocksdb_context.cc @@ -13,12 +13,12 @@ // limitations under the License. +#include "rocksdb_context.h" #include #include #include #include #include -#include "rocksdb_context.h" namespace zvec { diff --git a/src/db/common/utils.h b/src/db/common/utils.h index 43369f1..c238b92 100644 --- a/src/db/common/utils.h +++ b/src/db/common/utils.h @@ -11,6 +11,8 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +#pragma once + #include namespace zvec { diff --git a/src/include/zvec/db/doc.h b/src/include/zvec/db/doc.h index d8d649e..c78028c 100644 --- a/src/include/zvec/db/doc.h +++ b/src/include/zvec/db/doc.h @@ -323,8 +323,8 @@ class Doc { private: std::string pk_; float score_{0.0f}; - uint64_t doc_id_; - Operator op_; + uint64_t doc_id_{0}; + Operator op_{Operator::INSERT}; template static constexpr bool is_valid_type_v = @@ -341,17 +341,17 @@ class Doc { std::is_same_v> || // 10 std::is_same_v> || // 11 std::is_same_v> || // 12 - std::is_same_v> || // 13 - std::is_same_v> || // 14 + std::is_same_v> || // 13 + std::is_same_v> || // 14 std::is_same_v> || // 15 std::is_same_v> || // 16 std::is_same_v> || // 17 std::is_same_v> || // 18 std::is_same_v> || // 19 std::is_same_v< - T, std::pair, std::vector>> || // 20 + T, std::pair, std::vector>> || // 20 std::is_same_v< - T, std::pair, std::vector>>; // 21 + T, std::pair, std::vector>>; // 21 std::unordered_map fields_; }; diff --git a/src/include/zvec/db/options.h b/src/include/zvec/db/options.h index 1f2a9cb..8c3e8c5 100644 --- a/src/include/zvec/db/options.h +++ b/src/include/zvec/db/options.h @@ -17,11 +17,11 @@ namespace zvec { -const uint32_t DEFAULT_MAX_BUFFER_SIZE = 64 * 1024 * 1024; // 128M +const uint32_t DEFAULT_MAX_BUFFER_SIZE = 64 * 1024 * 1024; // 64M struct CollectionOptions { bool read_only_{false}; - bool enable_mmap_{true}; // ignnored when load collection + bool enable_mmap_{true}; // ignored when load collection uint32_t max_buffer_size_{ DEFAULT_MAX_BUFFER_SIZE}; // ignored when read_only=true