* use mmap bitslice and a metadata file to avoid loading
* fix and test reported files
* add new files to flusher
* update rocksdb+blob_store compatibility test
* switch to DynamicMmapFlags
* fix setting deleted to `false` on short bitslice
* remove `MmapBitSlice::extend`
* add some more tests to mmap sparse vector storage
* calculate deleted_count and next_point_offset on load
* get rid of metadata file
* cleanup
* fix test
---------
Co-authored-by: generall <andrey@vasnetsov.com>
* get total sparse size from inverted index
* populate on load if not present
* use debug assertion
* correct size calculation
* r u happy clippy
* fix total sparse size in immutable ram
* don't use options. move size_of_available_vectors to other traits
* adjust test
* fix rebase
* add on_disk option for bool index
* test that all files are covered
* generate openapi and docs
* clippy
* remove `populate` changes
* use `walkdir` crate
* Apply clippy suggestions
---------
Co-authored-by: timvisee <tim@visee.me>
* implement mmap sparse vector storage
* add to VectorStorageEnum
* clippy
* add tests, fix both simple and mmap storages
* smol correction on total_vector_count
* add sparse storage type to config
* fix reading config without storage type
* generate openapi
* use blob_store by path
* hidden setting to enable new storage
* validate existing path in `BlobStore::open()`
* use new dir for each sparse vector name
* fix and rename `max_point_offset`
Plus some extra refactors
* add storage compat test, to always check both storages work
* fix opening of storage + other misc fixes
* FIX!!!
`Unset` operations in the Tracker weren't updating the
`next_pointer_id`. So, when reopening the storage, those points wouldn't
get marked as deleted in the bitslice, thus creating the illusion that
they should exist, when they did not.
* refactor naming from `iter_*` to `for_each_*`
* fix checking for BlobStore existance
* fix typo
* fix error message
* better docs for open_or_create
* fix after rebase
* parent 33b2c176cb
author Ivan Pleshkov <pleshkov.ivan@gmail.com> 1729676438 +0200
committer Ivan Pleshkov <pleshkov.ivan@gmail.com> 1732012991 +0100
parent 33b2c176cb
author Ivan Pleshkov <pleshkov.ivan@gmail.com> 1729676438 +0200
committer Ivan Pleshkov <pleshkov.ivan@gmail.com> 1732012977 +0100
parent 33b2c176cb
author Ivan Pleshkov <pleshkov.ivan@gmail.com> 1729676438 +0200
committer Ivan Pleshkov <pleshkov.ivan@gmail.com> 1732012901 +0100
parent 33b2c176cb
author Ivan Pleshkov <pleshkov.ivan@gmail.com> 1729676438 +0200
committer Ivan Pleshkov <pleshkov.ivan@gmail.com> 1732012766 +0100
parent 33b2c176cb
author Ivan Pleshkov <pleshkov.ivan@gmail.com> 1729676438 +0200
committer Ivan Pleshkov <pleshkov.ivan@gmail.com> 1732012730 +0100
vulkan api wrapper crate
fmt
gpu is not a workspace member
exclude gpu from workspace
disable tests for gpu crate
ash version up
change collection for pipeline builder
gpu test
gpu is not optional
check device features
remove feature
make all fields private
more comments
are you happy fmt
qdrant team as authors
gpu vectors
move changes from magic branch
move storage updates
are you happy codespell
are you happy clippy
don't make storage_impl public
review remarks
are you happy clippy
are you happy fmt
* Update lib/segment/src/index/hnsw_index/gpu/gpu_vector_storage/tests.rs
Co-authored-by: Tim Visée <tim+github@visee.me>
* review remarks
---------
Co-authored-by: Tim Visée <tim+github@visee.me>
* Optimize mmap sequential access for large scoring
* use it
* make windows happy
* add missing CPU counters
* Will not need
* more unix build
* add benchmark
* fix and bench cmp
* larger batch size
* start appendable mmap implem
* reenable debug for bench
* remove old impl for comparison
* impl for chunk mmap
* fix windows
* debug assert
* errare human est
* windows cfg
* generalize peek_top_iter
* remove blanket implementation to force explicit decision
* less TODO
* account for size of T
* fmr
* simplify chunk impl
* relax constraint on contiguous ids
* remove madvice WILLNEED and clean batching infra
* some premature optimizations
* extra sequential mmap for MMapVectorStorage
* add read-only typed mmap
* add read-only typed mmap
* fix comments
* implement batch reads for chuncked mmap
* fix is_read_with_prefetch_efficient
* cleanup
---------
Co-authored-by: generall <andrey@vasnetsov.com>
* Track disk usage for each of the vectors and segments
* Dont extend vector_data field
* Remove comment and improve var name
* Introduce vectors_size_bytes and rename available_size_in_bytes
* Introduce vectors_size_bytes and rename available_size_in_bytes
* fix linter
* Avoid converting to u64
* calculate vectors_size_bytes for proxy segments
* Fix OpenAPI spec
* fix typo
* Add CPU measurement for multivectors
* add further test sparse vector search
* make updating vector_query_context consistent
* review fix + take element type into consideration
---------
Co-authored-by: generall <andrey@vasnetsov.com>
* include document & image objects into grpc API
* introduce image and object to rest api
* minor refactoring
* rename Vector -> VectorInternal
* decompose vector data structures
* add schema
* fmt
* grpc docs
* fix conversion
* fix clippy
* fix another conversion
* rename VectorInput -> VectorInputInternal
* replace grpc TryFrom with async functions
* fmt
* replace rest TryFrom with async functions
* add image and object into query rest
* separate inference related conversions
* move json-related conversions into a separate file
* move vector-related transformations into a separate file
* move more vector related-conversions into dedicated module
* Don't use ID but current point offset when optimizing dense mmap storage
This change now matches the implementation in all other storage types.
* Remove now obsolete point offsets in update_from point iterator
* Fix test
* refactor: introduce AdviceSetting for open_read_mmap/open_write_mmap
* perf: use Advice::Normal in a few places
* perf: use MADV_DONTNEED after reading
* perf: use POSIX_FADV_DONTNEED after reading
* make mmap_type independent from segment structures
* make bitvec and thiserror workspace dependencies
* move mmap_type into common/memory subcrate
* fmt
* add force_ram parameter to chuncked mmap vector storage
* enable mlocked mmap vector storage on unix by default
* regen openapi
* add mlock on creation of chunck
* minor unrelated renaming
* rollback changes in LockedChunkedMmap
* fmt
* make AppendableMmapDenseVectorStorage generic of storage type
* make AppendableMmapMultiDenseVectorStorage generic of storage type
* implement initialization of InRamChunkedMmap
* implement MultiDenseAppendableInRam and variations
* enable InRamChunkedMmap for multivectors
* use same CHUNK_SIZE for mmap and regular chuncked vectors
* enable InRamChunkedMmap by default
* fix tests
* rollback usage of InRamChunkedMmap by default
* review changes
* add assertion on chunk_capacity [skip-ci]
* sorting
* migrate tests and move logic into SegmentBuilder
* add test and improve implementation
* improve code
* review
* code review improvements
* add index building to test
* Do not clone ranges
* Resolve clippy warnings due to recent PR on dev
* review suggestions
* Defragmentation in api (#4684)
* add tenant config to api
* deduplicate used defragmentation keys
* rename is_tenant to is_primary
* use all values to defrag key
* rename is_primary -> is_tenant
* update schema
---------
Co-authored-by: generall <andrey@vasnetsov.com>
Co-authored-by: timvisee <tim@visee.me>
* Fix DynamicMmapFlag counting by not using get proxy
* Just count ones in the bitslice of our configured size
---------
Co-authored-by: timvisee <tim@visee.me>
* minor conversion improvement
* use NamedVectors in update_vectors
* remove merge from VectorStruct
* rename Multi -> Named in vector struct
* add multi-dense vectors option into VectorStruct
* generate openapi
* rename VectorStruct -> VectorStructInternal
* add conversion for anonymous multivec in grpc
* renames for BatchVectorStruct
* implement multi-dense for batch
* allow multi-dense in batch upserts
* test and fixes
* Max size of multivector to fix chunk in storage
* Update lib/common/common/src/validation.rs
---------
Co-authored-by: Andrey Vasnetsov <andrey@vasnetsov.com>
* include old vector into update function and clean posting lists accordingly
* add integration test
* fix counter
* also remove old vector if the insertion is empty
* clippy
* borrow once
* fix max_next_weight correcton on delete + test
* vector index responsible for updating vector storage
* review fixes
* add debug assert
- make `VectorQuery` generic
- retrieve ids from `CollectionQueryRequest` and convert into vectors
- implement `RetrieveRequest` trait for it
- calculate avg vector with logic from `recommendations.rs`
- convert `CollectionQueryRequest` into `ShardQueryRequest`
- begin implementing `query()` fn in collection