Repository navigation
C API: expose update_entries and replace_external_id for dynamic index - #468
yuejiaointel wants to merge 2 commits into
Conversation
|
Thanks @yuejiaointel for exposing One follow-up request:
valkey-search loads every index from a stream (RDB), so after a restart or a Could #468 (or a follow-up) add the stream counterpart of Same semantics as |
|
For the C API side of the proposal in #467 (comment) (benchmark numbers there). If the approach holds up, valkey-search would need, for FINE_GRAIN dynamic indexes:
The prototype (patch in the #467 comment) is local only; nothing here is a request to change this PR. |
Exposes two concurrent-index methods through the C API so integrations (e.g. valkey-search) can change a vector in place or rename its ID without delete + re-insert.
Stacked on #467 (
update_entries); base is that PR's branch.New C functions
svs_index_dynamic_update_points(index, points, ids, num_points, err)→update_entriesadd_points/delete_points).SVS_ERROR_NOT_IMPLEMENTED(the non-concurrent index has noupdate_entries).svs_index_dynamic_replace_id(index, old_id, new_id, err)→replace_external_idold_idor existingnew_id→SVS_ERROR_INVALID_ARGUMENT.Plumbed through
DynamicVamanaInterface/DynamicVamanaand the C APIDynamicIndexwrappers. New virtuals are appended at the end of both interfaces.Testing
ctest26/26 pass (public build,SVS_RUNTIME_ENABLE_LVQ_LEANVEC=OFF).v, searchingvreturns id 5 at distance 0 (before the update it returned id 51).has_id(5)false,has_id(1000)true, search returns 1000.SVS_ERROR_INVALID_ARGUMENT; update on NONE/GLOBAL →SVS_ERROR_NOT_IMPLEMENTED.🤖 Generated with Claude Code