Строгий режим#
Данный инструмент администрирования Platform V Vector DB (далее - Vector DB) позволяют изменять поведение экземпляра Vector DB во время выполнения без необходимости ручного редактирования его конфигурации.
Строгий режим — функция ограничения определенных типов операций с коллекцией для ее защиты.
Цель состоит в том, чтобы предотвратить неэффективное использование шаблонов запросов, которые могут перегрузить коллекции.
Эта конфигурация обеспечивает более предсказуемое и отзывчивое обслуживание, когда не контролируются выполняемые запросы.
Вот неполный список операций, которые могут быть ограничены с использованием строгого режима:
запрет на выполнение запросов к ненастроенным индексам полезной нагрузки, что может занять много времени;
максимальное число условий фильтрации в запросе;
максимальный размер пакета при вставке векторов;
максимальный размер коллекции (в терминах количества векторов или размера полезной нагрузки).
При превышении лимита сервер возвращает ошибку клиентской стороны с информацией о пересекаемом лимите.
Поле enabled в составе конфигурации действует как переключатель для динамического включения или отключения строгого режима.
Параметр strict_mode_config можно задать при создании коллекции, например, ниже приведена команда активации предела unindexed_filtering_retrieve.
Установка параметра unindexed_filtering_retrieve равным значению "false" предотвращает использование фильтрации по ключу полезной нагрузки, который не проиндексирован.
Предусловия#
Пререквизиты:
Доступ к серверу: SSH или физический доступ.
Установленный продукт: сервер должен быть запущен (кроме операций с файлами данных).
Исходный код: скрипты находятся в
/src/bin/репозитория продукта.Rust: установленный компилятор для сборки утилит.
Привилегии:
Файловая система: права на чтение/запись в
storage_path.API-ключ: обязателен ключ с правами
adminдля большинства операций.Сетевой доступ: доступность API-порта (порт по умолчанию 6333).
Ключевые требования:
API-ключ
admin.Остановка сервиса не требуется.
Последовательность выполнения#
Активации строго режима:
PUT /collections/{collection_name}
{
"strict_mode_config": {
"enabled": true,
"unindexed_filtering_retrieve": false
}
}
curl -X PUT http://localhost:6333/collections/{collection_name} \
-H 'Content-Type: application/json' \
--data-raw '{
"strict_mode_config": {
"enabled":" true,
"unindexed_filtering_retrieve": false
}
}'
from qdrant_client import QdrantClient, models
client = QdrantClient(url="http://localhost:6333")
client.create_collection(
collection_name="{collection_name}",
strict_mode_config=models.StrictModeConfig(enabled=True, unindexed_filtering_retrieve=false),
)
import { QdrantClient } from "@qdrant/js-client-rest";
const client = new QdrantClient({ host: "localhost", port: 6333 });
client.createCollection("{collection_name}", {
strict_mode_config: {
enabled: true,
unindexed_filtering_retrieve: false,
},
});
use qdrant_client::Qdrant;
use qdrant_client::qdrant::{CreateCollectionBuilder, StrictModeConfigBuilder};
let client = Qdrant::from_url("http://localhost:6334").build()?;
client
.create_collection(
CreateCollectionBuilder::new("{collection_name}")
.strict_config_mode(StrictModeConfigBuilder::default().enabled(true).unindexed_filtering_retrieve(false)),
)
.await?;
import io.qdrant.client.QdrantClient;
import io.qdrant.client.QdrantGrpcClient;
import io.qdrant.client.grpc.Collections.CreateCollection;
import io.qdrant.client.grpc.Collections.StrictModeCOnfig;
QdrantClient client =
new QdrantClient(QdrantGrpcClient.newBuilder("localhost", 6334, false).build());
client
.createCollectionAsync(
CreateCollection.newBuilder()
.setCollectionName("{collection_name}")
.setStrictModeConfig(
StrictModeConfig.newBuilder().setEnabled(true).setUnindexedFilteringRetrieve(false).build())
.build())
.get();
using Qdrant.Client;
using Qdrant.Client.Grpc;
var client = new QdrantClient("localhost", 6334);
await client.CreateCollectionAsync(
collectionName: "{collection_name}",
strictModeConfig: new StrictModeConfig { enabled = true, unindexed_filtering_retrieve = false }
);
import (
"context"
"github.com/qdrant/go-client/qdrant"
)
client, err := qdrant.NewClient(&qdrant.Config{
Host: "localhost",
Port: 6334,
})
client.CreateCollection(context.Background(), &qdrant.CreateCollection{
CollectionName: "{collection_name}",
StrictModeConfig: &qdrant.StrictModeConfig{
Enabled: qdrant.PtrOf(true),
IndexingThreshold: qdrant.PtrOf(false),
},
})
Или включите его позже для существующей коллекции через API обновления коллекции:
PATCH /collections/{collection_name}
{
"strict_mode_config": {
"enabled": true,
"unindexed_filtering_retrieve": false
}
}
curl -X PATCH http://localhost:6333/collections/{collection_name} \
-H 'Content-Type: application/json' \
--data-raw '{
"strict_mode_config": {
"enabled": true,
"unindexed_filtering_retrieve": false
}
}'
from qdrant_client import QdrantClient, models
client = QdrantClient(url="http://localhost:6333")
client.update_collection(
collection_name="{collection_name}",
strict_mode_config=models.StrictModeConfig(enabled=True, unindexed_filtering_retrieve=False),
)
import { QdrantClient } from "@qdrant/js-client-rest";
const client = new QdrantClient({ host: "localhost", port: 6333 });
client.updateCollection("{collection_name}", {
strict_mode_config: {
enabled: true,
unindexed_filtering_retrieve: false,
},
});
use qdrant_client::qdrant::{StrictModeConfigBuilder, UpdateCollectionBuilder};
client
.update_collection(
UpdateCollectionBuilder::new("{collection_name}").strict_mode_config(
StrictModeConfigBuilder::default().enabled(true).unindexed_filtering_retrieve(false),
),
)
.await?;
import io.qdrant.client.grpc.Collections.StrictModeConfigBuilder;
import io.qdrant.client.grpc.Collections.UpdateCollection;
client.updateCollectionAsync(
UpdateCollection.newBuilder()
.setCollectionName("{collection_name}")
.setStrictModeConfig(
StrictModeConfig.newBuilder().setEnabled(true).setUnindexedFilteringRetrieve(false).build())
.build());
using Qdrant.Client;
using Qdrant.Client.Grpc;
var client = new QdrantClient("localhost", 6334);
await client.UpdateCollectionAsync(
collectionName: "{collection_name}",
strictModeConfig: new StrictModeConfig { Enabled = true, UnindexedFilteringRetrieve = false }
);
import (
"context"
"github.com/qdrant/go-client/qdrant"
)
client, err := qdrant.NewClient(&qdrant.Config{
Host: "localhost",
Port: 6334,
})
client.UpdateCollection(context.Background(), &qdrant.UpdateCollection{
CollectionName: "{collection_name}",
StrictModeConfig: &qdrant.StrictModeConfig{
Enabled: qdrant.PtrOf(true),
UnindexedFilteringRetrieve: qdrant.PtrOf(false),
},
})
Для полного отключения строгого режима на существующей коллекции используйте:
PATCH /collections/{collection_name}
{
"strict_mode_config": {
"enabled": false
}
}
curl -X PATCH http://localhost:6333/collections/{collection_name} \
-H 'Content-Type: application/json' \
--data-raw '{
"strict_mode_config": {
"enabled": false,
}
}'
from qdrant_client import QdrantClient, models
client = QdrantClient(url="http://localhost:6333")
client.update_collection(
collection_name="{collection_name}",
strict_mode_config=models.StrictModeConfig(enabled=False),
)
import { QdrantClient } from "@qdrant/js-client-rest";
const client = new QdrantClient({ host: "localhost", port: 6333 });
client.updateCollection("{collection_name}", {
strict_mode_config: {
enabled: false,
},
});
use qdrant_client::qdrant::{StrictModeConfigBuilder, UpdateCollectionBuilder};
client
.update_collection(
UpdateCollectionBuilder::new("{collection_name}").strict_mode_config(
StrictModeConfigBuilder::default().enabled(false),
),
)
.await?;
import io.qdrant.client.grpc.Collections.StrictModeConfigBuilder;
import io.qdrant.client.grpc.Collections.UpdateCollection;
client.updateCollectionAsync(
UpdateCollection.newBuilder()
.setCollectionName("{collection_name}")
.setStrictModeConfig(
StrictModeConfig.newBuilder().setEnabled(false).build())
.build());
using Qdrant.Client;
using Qdrant.Client.Grpc;
var client = new QdrantClient("localhost", 6334);
await client.UpdateCollectionAsync(
collectionName: "{collection_name}",
strictModeConfig: new StrictModeConfig { Enabled = false }
);
import (
"context"
"github.com/qdrant/go-client/qdrant"
)
client, err := qdrant.NewClient(&qdrant.Config{
Host: "localhost",
Port: 6334,
})
client.UpdateCollection(context.Background(), &qdrant.UpdateCollection{
CollectionName: "{collection_name}",
StrictModeConfig: &qdrant.StrictModeConfig{
Enabled: qdrant.PtrOf(false),
},
})
Результат#
Сценарий |
Результат |
|---|---|
Запрет фильтрации |
Клиенты не смогут выполнять фильтрацию по полям без индекса |
Ограничение пакетов |
Превышение максимального размера пакета приведет к ошибке |
Контроль объема коллекции |
Добавление новых данных блокируется при достижении лимита |
Динамическое управление |
Включение/выключение строгого режима выполняется без перезапуска сервиса |
Ошибка клиента |
При нарушении ограничений сервер возвращает ошибку с описанием причины |
Важные замечания:
Наследование настроек: строгий режим применяется только к указанной коллекции. Для других коллекций требуется отдельная настройка.
Индексация полей: для использования фильтрации по полезной нагрузке необходимо создать индексы заранее.
Производительность: строгий режим снижает риск деградации производительности, но требует корректной настройки лимитов.