Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
= ADR 0051 - Evaluating vector databases as AppCat services
:adr_author: Simon Beck
:adr_owner: Schedar
:adr_reviewers:
:adr_date: 2026-01-14
:adr_upd_date: 2026-01-14
:adr_status: draft
:adr_tags: database,service

include::partial$adr-meta.adoc[]

[NOTE]
.Summary
====
Exisitng AppCat services already provide some vector capabilities.
For any other use-cases the required databases should be provided as solutions.
====

== Context

More customers require vector databases for various AI related workloads.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are there any specific features required or did customers only inquire about vector databases in general?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The later.


To provide the best services possible some of the most popular open source solutions are evaluated in this ADR.


Solutions being evaluated:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How do these compare performance and resource consumption wise?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did not do any benchmarking. Would also have been a pain since every solution has their own API...

Chroma and qdrant were basically negligible, with less than 100mb memory and 1mCPU. Milvus with all its bundled services was by far the heaviest on resources even in idle. I did not take any note of the concrete numbers for that though.


- OpenSearch/ElasticSearch
- PostgreSQL with pgvector
- Redis
- Chroma
- Qdrant
- Milvus

=== OpenSearch/ElasticSearch

OpenSearch/ElasticSearch provides vector capabilities https://opensearch.org/platform/vector-search/[out of the box].
Either one of these products are already on the roadmap for AppCat.

=== PostgreSQL with pgvector

StackGres and CNPG both already provide the pgvector extension.
For StackGres it needs to be installed via the `extensions` stanza.
CNPG pre-installs it in their default image.
So the vector capabilities of our PostgreSQL offering is already there.
Additional documentation to make users aware of this feature is recommended though.

=== Redis

Redis also provides vector capabilities out of the box.
Redis provides documentation on how to use it: https://redis.io/docs/latest/develop/get-started/vector-database/#prepare-the-demo-dataset

=== Dedicated Vector databases

[cols=4]
|===
|Criteria
|Chroma
|Qdrant
|Milvus

|Installation
|https://github.com/amikos-tech/chromadb-chart[community helm chart], but very limited functionality, missing HA
|Official Helm chart available, enterprise operator
|Official chart and operator available

|Backup
|https://cookbook.chromadb.dev/strategies/backup/[Export tool available, filesystem snapshots and filesystem snapshots]
|https://qdrant.tech/documentation/database-tutorials/create-snapshot/[Pretty involved process for clusters]
|https://milvus.io/docs/milvus_backup_cli.md[Backup tooling available]

|Metrics
|https://docs.trychroma.com/guides/deploy/observability[Opentelemetry traces]
|https://qdrant.tech/documentation/guides/monitoring/[OpenMetrics/Prometheus]
|https://milvus.io/docs/monitor.md[OpenMetrics/Prometheus]

|Maintenance/2nd-day operations
|https://cookbook.chromadb.dev/running/maintenance/[Chroma ops tool to do maintenance on the database]
|https://qdrant.tech/documentation/guides/administration/[Administration guide]
|Administration guides available that cover a lot of topics

|Update/Upgrade
|https://docs.trychroma.com/docs/overview/migration[Migration guide available], recent rewrite in rust, rewrite doesn't have authentication
|https://qdrant.tech/documentation/faq/qdrant-fundamentals/?q=upgradeupgrade+guide#how-do-i-avoid-issues-when-updating-to-the-latest-version[Updates to the next consecutive version are supported]
|Automated via their operator

|License
|Apache License 2.0
|Apache License 2.0
|Apache License 2.0

|===

=== Chroma
Chroma's maturity doesn't seem to be there, many things are not documented on the official page but rather on a community driven page.
Only a rudimentary helm chart is available.
The recent rewrite in rust dropped features that were previously available.

=== Qdrant
Qdrant's documentation is excellent.
However, there's a lot of "available on our cloud offering" there as well for features like cluster backups, which might be concerning for future anti-consumer decisions.
The overall architecture and concepts are very inspired by ElasticSearch.

=== Milvus

Milvus is by far the most complex solution of the three.
Although it provides an operator to handle the deployment, the amount of services it needs and deploys is extensive:

- dedicated etcd
- message queue
- minio
- zookeeper

This rivals Kafka in complexity.

== Decision

The AppCat portofolio already contains two existing services that provide vector capabilities.
OpenSearch/ElasticSearch is on the roadmap.
These services and products are very well understood and widely used.
AppCat should provide documentation to make users aware of the vector capabilities of these services.

The dedicated vector databases might fit some use cases better, but of the three concrete requests we got, three different products were mentioned or requested.
Given the initial effort to make a service AppCat managed, it's not feasible to add these services just for 1-2 instances.
In these cases the databases should be handled as a solution.
If at one point the adoption and demand for a specific product increases, the need to provide it as a self-service AppCat service can be re-evaluated.

== Consequences
We do not adopt any new vector database services into the AppCat service catalog.
Instead we make users aware about the vector capabilities of the existing services.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How would customers make use of these capabilities? I'm assuming there will still be some initial implementation needed by us to allow the use of it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See my answer here: #177 (comment)


For any specific vector database deploying it as a solution should be considered.
34 changes: 19 additions & 15 deletions docs/modules/ROOT/pages/adr/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -165,32 +165,36 @@

`framework, networking, tcp`
|accepted |2025-10-01 |2025-10-27
|xref:adr/0041-migrate-minio-to-rclone.adoc[]

`minio,rclone,objectstorage`
|rejected |2025-12-29 |2026-01-06
|xref:adr/0042-backup-encryption-for-mariadb-galera-and-postgresql.adoc[]

`backup,encryption,galera,postgresql`
|draft |2025-10-06 |2025-10-06
|xref:adr/0043-wazuh-agent-for-appcat-services.adoc[]

`siem,xdr,security`
|draft | |2026-01-08
|xref:adr/0044-configuration-language-kcl-vs-cue.adoc[]

`framework,framework2,kcl,cue`
|draft | |
`framework,framework2,kcl,cue,configuration`
|draft |:adr_upd_date: |
|xref:adr/0045-service-orchestration-crossplane-2-0.adoc[]

`framework,framework2,crossplane,composition`
|draft | |
`framework,framework2,crossplane,composition,orchestration`
|draft |:adr_upd_date: |
|xref:adr/0046-secret-management-framework-2-0.adoc[]

`framework,framework2,billing,odoo`
|draft | |
`framework,framework2,secrets,crossplane,vault,openbao`
|draft |:adr_upd_date: |
|xref:adr/0047-service-maintenance-and-upgrades-framework-2-0.adoc[]

`framework,framework2,testing`
|draft | |
|xref:adr/0041-migrate-minio-to-rclone.adoc[]
`framework,framework2,maintenance,upgrades,crossplane,workflows,cronoperations`
|draft |:adr_upd_date: |
|xref:adr/0048-evaluating-vector-databases-as-appcat-services.adoc[]

`minio,rclone,objectstorage`
|rejected |2025-12-29 |2026-01-06
|xref:adr/0043-wazuh-agent-for-appcat-services.adoc[]

`siem,xdr,security`
|draft | |2026-01-08
`database,service`
|draft | |2026-01-14
|===
3 changes: 2 additions & 1 deletion docs/modules/ROOT/partials/nav-adrs.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,5 @@
** xref:adr/0044-configuration-language-kcl-vs-cue.adoc[]
** xref:adr/0045-service-orchestration-crossplane-2-0.adoc[]
** xref:adr/0046-secret-management-framework-2-0.adoc[]
** xref:adr/0047-service-maintenance-and-upgrades-framework-2-0.adoc[]
** xref:adr/0047-service-maintenance-and-upgrades-framework-2-0.adoc[]
** xref:adr/0048-evaluating-vector-databases-as-appcat-services.adoc[]
2 changes: 1 addition & 1 deletion templates/adr/cookiecutter.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"adr_number": "0051",
"adr_number": "0049",
"full_name": "VSHNeer Name",
"adr_title": "Title",
"adr_reviewers": "",
Expand Down