·
Last changedVersion:
This version passed the hardening gate. Hardening applied 7 targeted changes and preserved all other text. Classified findings before hardening: 0. Classified findings closed: 0. Classified findings remaining: 0. Unclassified scanner findings remaining: 0. Review findings closed: 9. Review findings remaining: 3.
None
None
Expand | File | Group | Subtype | Severity | Status |
|---|
No findings available
0 findings
Do not create one collection per tenant. Does not scale well and wastes resources. Collection limits, tenant index support, tiered multitenancy and custom sharding depend on the Qdrant version and deployment, so check the user's version against the official documentation before relying on them. Use a shared collection with a tenant key.
Here is a short summary of the patterns:
Use the default multitenancy strategy via payload filtering.
Read about Partition by payload and Calibrate performance for best practices on indexing and query performance.
Every query, upsert, delete, scroll, and count must include the tenant filter. Take the tenant ID from authenticated server side context rather than from user input, and test that cross-tenant queries return nothing.
At this scale, the cluster may consist of several peers. To localize tenant data and improve performance, use custom sharding to assign tenants to specific shards. The application maps each tenant to one of a bounded set of shard keys, for example with its own hash of the tenant ID, and passes that shard key on every write and query; Qdrant routes by the shard key it is given rather than hashing tenant IDs itself. Watch the load on each shard, and move large tenants to dedicated shards as described in the tiered multitenancy section below. This will localize tenant requests to specific nodes instead of broadcasting them to all nodes, improving performance and reducing load on each node.
If some tenants are much larger than others, use tiered multitenancy to promote large tenants to dedicated shards while keeping small tenants on shared shards. This optimizes resource allocation and performance for tenants of varying sizes.
Use when: legal/compliance requirements demand per-tenant encryption or strict isolation beyond what payload filtering provides.
is_tenant=true on the tenant index (kills sequential read performance)payload_m instead so graphs are built per tenant, pair it with a tenant index using is_tenant=true, and include the tenant filter in queries, since unfiltered queries will not use a global graph)Get started with chainctlchainctl skill install public/github/tenant-scaling:latest
Bring Chainguard's hardening pipeline to your first-party skills — custom rulesets, automated remediation, full audit trail.
skills.chainreg.biz/public/github.com/github/skills/qdrant-scaling/scaling-data-volume/tenant-scaling:latest
MIT
HARDENING.md
LICENSE
SKILL.md