Koleksiyonlar
Qdrant vektör veritabanındaki koleksiyon kavramı, MYSQL'deki tablo yapısına benzer ve aynı türdeki vektör verilerini eşit şekilde depolamak için kullanılır. Bir koleksiyonda depolanan her veri parçası Qdrant'ta bir nokta olarak adlandırılır. Burada, bir nokta matematiksel geometrik uzay kavramına benzer ve geometrik uzaydaki bir vektörün temsili olarak düşünülebilir (sadece bir veri parçası olarak düşünün).
Aynı koleksiyonda, her noktanın vektörü aynı boyuta sahip olmalı ve tek bir metrik kullanılarak karşılaştırılmalıdır. Adlandırılmış vektörler, her birinin kendi boyutları ve metrik gereksinimleri olan birden fazla vektörü bir noktaya dahil etmek için kullanılabilir.
Benzerlik ölçmek için mesafe metrikleri kullanılır. Metriğin seçimi, özellikle nöral ağ kodlayıcılarının eğitimi için kullanılan yöntemler de dahil olmak üzere vektörlerin nasıl elde edildiğine bağlıdır.
Qdrant, aşağıdaki popüler metrik türlerini destekler:
- Nokta çarpımı: Dot
- Cosine benzerliği: Cosine
- Öklid mesafesi: Euclid
Arama verimliliğini artırmak için, cosinüs benzerliği, normalize edilmiş vektörlerin nokta çarpımını alarak elde edilir. Yüklenirken, vektörler otomatik olarak normalize edilir. Metrikler ve vektör boyutlarına ek olarak, her koleksiyon ayrıca koleksiyon optimizasyonunu, indeks oluşturmayı ve temizlemeyi kontrol etmek için kendi parametrelerini de kullanır. Bu ayarlar ilgili istekler aracılığıyla her zaman değiştirilebilir.
Çok Kiracılılık Kurulumu
Kaç koleksiyon oluşturulmalıdır? Çoğu durumda, genellikle payload tabanlı bölütleme ile tek bir koleksiyon kullanmanız yeterlidir. Bu yaklaşım çok kiracılık olarak bilinir. Çoğu kullanıcı için bu verimli olsa da ek yapılandırma gerektirir. Çok kiracılığın nasıl kurulacağını öğrenin.
Ne zaman birden fazla koleksiyon oluşturulmalıdır? Sınırlı sayıda kullanıcınız varsa ve izolasyon gerekiyorsa birden fazla koleksiyon oluşturmanız gerekebilir. Bu yaklaşım daha esnek olmasına rağmen büyük bir sayıda koleksiyon oluşturmak kaynak aşımına neden olabileceğinden daha maliyetli olabilir. Ayrıca, bunların performans açısından birbirleriyle, herhangi bir şekilde müdahale etmediklerinden emin olmanız gerekir.
Koleksiyon Oluşturma
PUT /collections/{koleksiyon_adı}
{
"vekt
### Çoklu vektör koleksiyonu
*V0.10.0 sürümünden itibaren mevcut*
Her kayıt birden fazla vektöre sahip olabilir. Bu özellik, bir koleksiyonda birden fazla vektörün depolanmasına olanak tanır. Kayıt içindeki vektörleri ayırt etmek için koleksiyon oluşturulurken bunların benzersiz adlarını tanımlayabilirsiniz. Bu şema altındaki her adlandırılmış vektörün kendi uzaklığı ve boyutu bulunmaktadır:
PUT /collections/{collection_name}
{ "vectors": { "image": { "size": 4, "distance": "Dot" }, "text": { "size": 8, "distance": "Cosine" } } }
Bazı özel durumlar için, herhangi bir vektör depolaması olmayan bir koleksiyon da oluşturulabilir.
*V1.1.1 sürümünden itibaren mevcut*
Her adlandırılmış vektör için, koleksiyon yapılandırmasından sapmak için isteğe bağlı olarak `hnsw_config` veya `quantization_config` belirtebilirsiniz. Bu, vektör düzeyinde arama performansını optimize etmek için kullanılabilir.
*V1.2.0 sürümünden itibaren mevcut*
Vektörler hızlı erişim için bellekte depolanır. Her vektör için `on_disk` değeri, tüm vektörleri her zaman diske depolamak için `true` olarak ayarlanabilir. Bu, büyük miktarda veri alımı için uygun olan bellek eşlemesini etkinleştirir.
### Koleksiyon silme
DELETE /collections/{collection_name}
## Koleksiyon parametreleri güncelleme
Dinamik parametre güncellemeleri, vektörlerin daha verimli ilk yüklenmesi gibi konularda faydalı olabilir. Örneğin, yükleme sırasında dizin oluşturmayı devre dışı bırakabilir ve yükleme tamamlandıktan hemen sonra etkinleştirebilirsiniz. Bu şekilde, dizini yeniden oluşturmak için fazladan hesaplama kaynaklarını boşa harcamamış olursunuz.
Aşağıdaki komut, 10000 kB'den büyük vektörler içeren bir segment için dizin oluşturmayı etkinleştirir:
```json
PATCH /collections/{collection_name}
{
"optimizers_config": {
"indexing_threshold": 10000
}
}
Aşağıdaki parametreler güncellenebilir:
-
optimizers_config
- Optimizasyonların detaylı açıklamaları için bakınız. -
hnsw_config
- İndeksin detaylı açıklamaları için bakınız. -
quantization_config
- Kuantizasyonun detaylı açıklamaları için bakınız. -
vectors
- Belirli vektörler için yapılandırma, bunların ilgilihnsw_config
,quantization_config
veon_disk
ayarları dahil. -
params
- Yazma tutarlılık faktörü veon_disk_payload
dahil olmak üzere diğer koleksiyon parametreleri.
Tam API belirtmesi, şema tanımlamaları içinde bulunmaktadır.
V1.4.0 sürümünden itibaren mevcut
Qdrant 1.4, koleksiyon parametrelerini çalışma zamanında daha fazla güncelleme desteği ekler. HNSW indeksi, kuantizasyon ve disk yapılandırması artık koleksiyonu yeniden oluşturmadan değiştirilebilir. Segmentler (indeks ve kuantizasyon verileriyle birlikte), güncellenen parametrelere uymak üzere arka planda otomatik olarak yeniden oluşturulacaktır.
Aşağıdaki örnekte, my_vector
için tüm koleksiyon ve HNSW indeksi ve kuantizasyon parametreleri güncellenmiştir:
PATCH /collections/{collection_name}
{
"vectors": {
"my_vector": {
"hnsw_config": {
"m": 32,
"ef_construct": 123
},
"quantization_config": {
"product": {
"compression": "x32",
"always_ram": true
}
},
"on_disk": true
}
},
"hnsw_config": {
"ef_construct": 123
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.8,
"always_ram": false
}
}
}
Not: Adlandırılmış vektörlere sahip olmayan bir koleksiyonda vektör parametrelerini güncellemek için boş (""
) bir isim kullanılabilir.
Bu uç noktaya yapılan çağrılar, mevcut optimizasyonların tamamlanmasını beklediği için bloke olabilir. İndeksi yeniden oluşturmak önemli bir iş yükü getirebileceğinden bu özelliğin üretim veritabanında kullanılmasını önermiyoruz.
Toplama Bilgisi
Qdrant, mevcut bir koleksiyon için yapılandırma parametrelerini belirlemeye olanak tanır ve noktaların dağılımını ve dizinleme durumunu daha iyi anlamak için kullanılır.
GET /collections/{collection_name}
{
"result": {
"status": "green",
"optimizer_status": "ok",
"vectors_count": 1068786,
"indexed_vectors_count": 1024232,
"points_count": 1068786,
"segments_count": 31,
"config": {
"params": {
"vectors": {
"size": 384,
"distance": "Cosine"
},
"shard_number": 1,
"replication_factor": 1,
"write_consistency_factor": 1,
"on_disk_payload": false
},
"hnsw_config": {
"m": 16,
"ef_construct": 100,
"full_scan_threshold": 10000,
"max_indexing_threads": 0
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": 20000,
"flush_interval_sec": 5,
"max_optimization_threads": 1
},
"wal_config": {
"wal_capacity_mb": 32,
"wal_segments_ahead": 0
}
},
"payload_schema": {}
},
"status": "ok",
"time": 0.00010143
}
Eğer vektörler koleksiyona eklendiyse, status
alanı optimizasyon sırasında "yellow" olarak değişebilir ve tüm noktalar başarıyla işlendikten sonra "green" olacaktır.
Aşağıdaki renk durumlarıyla karşılaşılabilir:
- ?
green
: Koleksiyon hazır durumda - ?
yellow
: Koleksiyon optimizasyon sürecinde - ?
red
: Motor karşılaşılamaz bir hata ile karşılaştı
İlgili diğer özellikler arasında şunlar bulunmaktadır:
-
points_count
- Koleksiyonda depolanan nesnelerin (vektörlerin ve payload'ların) toplam sayısı -
vectors_count
- Koleksiyondaki toplam vektör sayısı. Her bir nesnenin birden fazla vektörü varsa, bupoints_count
'a eşit olmayabilir. -
indexed_vectors_count
- HNSW dizininde depolanan toplam vektör sayısı. Qdrant tüm vektörleri dizine depolamaz, sadece verilen yapılandırmaya göre indeks segmentleri oluşturabilecek vektörleri depolar.
HNSW'de Vektör Dizinleme
Bazı durumlarda, indexed_vectors_count
değerinin vectors_count
değerinden düşük olduğunu görebilirsiniz. Bu, optimizasyonun yapılandırmasına bağlı olarak kasıtlı bir davranıştır. Yeni bir indeks segmenti, dizinlenmemiş vektörlerin boyutu indexing_threshold
(KB cinsinden) değerini aştığında oluşturulacaktır. Koleksiyonunuz çok küçükse veya vektör boyutu düşükse, HNSW segmentleri oluşturulmayabilir ve indexed_vectors_count
değeri 0
'a eşit olabilir.
Mevcut koleksiyonda yeni bir indeks segmenti oluşturmak için indexing_threshold
değerini düşürebilirsiniz.
Koleksiyon Takma Adları
Üretim ortamında, yeni nöral ağ sürümüne yükseltme gibi farklı vektör sürümleri arasında sorunsuz bir şekilde geçiş yapma ihtiyacı olabilir.
Bu durumlarda, hizmeti durdurmak ve yeni vektörleri kullanarak koleksiyonu yeniden oluşturmak mümkün olmayabilir. Bir takma ad, mevcut bir koleksiyon için ek bir isimdir. Sorgulama, koleksiyon adı yerine takma adı kullanarak tam olarak gerçekleştirilebilir.
Bu nedenle, arka planda ikinci bir koleksiyon oluşturulabilir ve ardından takma ad eski koleksiyondan yeni koleksiyona geçiş yapılabilir. Takma ad değişiklikleri atomiktir, bu nedenle geçiş süreci sırasında eş zamanlı istekler etkilenmez.
Takma Ad Oluştur
POST /collections/aliases
{
"actions": [
{
"create_alias": {
"alias_name": "production_collection",
"collection_name": "example_collection"
}
}
]
}
Takma Ad Sil
POST /collections/aliases
{
"actions": [
{
"delete_alias": {
"alias_name": "production_collection"
}
}
]
}
Koleksiyon Değiştir
Birden fazla takma ad işlemi atomik olarak gerçekleştirilebilir. Örneğin, altındaki koleksiyonu değiştirmek için aşağıdaki komutu kullanabilirsiniz:
POST /collections/aliases
{
"actions": [
{
"delete_alias": {
"alias_name": "production_collection"
}
},
{
"create_alias": {
"alias_name": "production_collection",
"collection_name": "new_collection"
}
}
]
}
Liste Koleksiyonu Takma Adları
GET /collections/{collection_name}/aliases
Tüm Takma Adları Listele
GET /aliases
Tüm Koleksiyonları Listele
GET /collections