请问hnsw索引的增删改与search是可以并发的吗?
yockie opened this issue · comments
所有写串行,读并行,读写之间不影响
改变邻居的个数但是不影响邻居节点的存储,邻居节点的存储是nlinks个节点的数组,这个数组是不变的。即update的过程中,search线程可能读的邻居节点数据不是实时的,但是不会越界
这种情况可能重建索引更合适,如果增删的频率很高
另外,addPoint时为啥不把embedding数据拷贝到对应内存空间啊?见下面的红框部分,找了一下hnsw其他地方没有拷贝data_point的地方
向量是由GammaIndexHNSWLIB管理的,并没有使用hnswlib这部分的结构
我知道是用GammaIndexHNSWLIB中的raw_vec_保存向量的,getDataByInternalId是一个虚函数,由GammaIndexHNSWLIB实现,从raw_vec_找到对应位置的向量首地址;但是我从GammaIndexHNSWLIB::Add函数一路跟下来,没看到有代码插入到raw_vec_中,求指教
是向量先插入到raw_rec,然后hnsw索引再去对对应的向量构建索引。可以看看vectormanager的实现