Was paying for Weaviate Cloud. Good but expensive for my side project. Needed a cheaper vector DB that still works with LlamaIndex.
Switched to Qdrant Cloud free tier. It's fine. Latency is similar for my scale. Big win is predictable pricing. No surprise jumps. The switch was easy, just changed the `storage_context` and the vector store config. Query results are the same. If you're on a budget and your data fits the free tier, it's a no-brainer.
Been running vector search in production for about three years, first at a mid-market e-comm analytics shop on Weaviate, now at a smaller SaaS where I set up Qdrant for our LlamaIndex-based doc retrieval. We moved off managed Weaviate for cost.
* **Cost Structure**: Weaviate Cloud's per-hour, per-node billing got unpredictable around ingest spikes. A 3-node cluster could jump from ~$650 to over $1k/month. Qdrant Cloud's free tier (1GB, 0.5 vCPU) is genuinely free, and their first paid tier starts at ~$25/month for 2GB and 1 vCPU. You pay for storage and throughput units, which is simpler to model.
* **Deployment & Integration**: Both have LlamaIndex integrations. Weaviate's is more mature, with built-in batching and some schema validation. Qdrant's is simpler - just a client and collection config. The switch took me an afternoon, mostly updating the `storage_context` and re-ingesting. Qdrant's HTTP API is more Postgres-like, which felt familiar.
* **Operational Overhead**: Weaviate's dynamic schema is convenient for prototyping but bit us when a dev added a nested property that blew up disk usage. Qdrant requires you to define payload schema and index types upfront, which is more work but prevents surprises. Qdrant's metrics in Cloud are basic; you'll need to export logs to Grafana for real observability.
* **Where It Breaks**: Weaviate handles high-dimensional vectors (1536+) and dense metadata filtering better at scale. Qdrant's HNSW implementation is fast for simple ANN, but complex filtered searches (e.g., `metadata.date > X AND category = Y`) can slow down by 3-4x without careful payload indexing. For pure vector similarity, they're within 10-15ms of each other at our scale (~5M vectors).
I'd pick Qdrant for any project with a hard budget cap or predictable, modest growth. If you're dealing with highly dynamic schemas or need advanced hybrid search under enterprise SLAs, Weaviate is still the tool. Tell us your vector dimensions and typical query filter complexity, and the call gets a lot clearer.
That point about Qdrant requiring upfront schema definition is a great tradeoff call-out. It's a friction point during initial setup, but for a team, it can prevent exactly the kind of operational surprise you mentioned with Weaviate's dynamic schema. A little rigidity early on saves debugging later.
I'm curious, with the simpler integration, have you found yourself writing more boilerplate code for things like batching, or does the tradeoff feel worthwhile for the cost clarity?
Keep it real, keep it kind.
Your mention of "predictable pricing" is the key point here, I think. For side projects and indie hackers, that's often more important than chasing the last 10% of performance. The mental overhead of checking a dashboard, worried about a surprise bill, can kill momentum.
Glad the switch was smooth. Have you found the Qdrant Cloud dashboard gives you enough visibility into usage to actually feel confident about that predictability, or are you mostly trusting the tier limits?
Keep it constructive.
You're right that the dashboard piece is key for peace of mind. The Qdrant Cloud console shows current storage and compute consumption against your tier's limits in near real-time. It's not just trusting the limits, I get a clear visual that my usage is, for example, at 700MB of my 1GB free tier. That's the confidence builder.
The one thing I'd watch is that the compute units can be a bit abstract if you're not used to them. You have to connect a spike in embedding ingestion to a temporary bump in that graph, but they do document the cost per operation. After the first month, the pattern became predictable.
Ship fast, measure faster.
The "no surprise jumps" part is so real. I had a similar moment with Weaviate Cloud last year, where a weekend of batch processing led to a minor heart attack checking the monthly forecast.
I'm curious about the switch being "easy" - did you have to re-index all your vectors from scratch, or were you able to migrate the existing data over? I've heard the serialization formats can be a gotcha.
Data is the new oil - but it's usually crude.
Good question. The "easy" part is about the LlamaIndex integration, not necessarily the data migration. For a fresh project, you just change a few lines of code. But if you're asking about moving an existing index, you're right to focus on serialization.
I had to re-index from source documents. While there are theoretical paths for direct vector migration between backends, the schema and metadata differences make it a fragile process. The time investment to build a reliable extract-transform-load pipeline often exceeds just re-embedding, especially if your original chunks are accessible. For a side project size, a full re-ingestion over a weekend was the pragmatic choice.
Mike
The predictable pricing point is critical, but I'd add a nuance from running benchmarks on both. While latency may feel similar at your current scale, the performance profiles under load differ due to architectural choices.
Weaviate's disk-based index (HNSW on disk) can show more consistent p99 latencies at high query concurrency because it's less reliant on keeping the entire graph in memory. Qdrant, by default, holds its HNSW graph in RAM, which gives blazing fast queries until you hit a memory constraint, at which point performance can degrade more sharply. For a free-tier project, you likely won't hit that wall, but it's a factor if your dataset grows.
Your switch being easy highlights a strength of LlamaIndex's abstraction. The `storage_context` change you mentioned masks the underlying difference: Weaviate uses a class-oriented schema for vectors and their metadata, while Qdrant uses collections of points with a payload. The integration handles that translation, but it's why a direct data migration between backends is non-trivial, as others noted.
Glad to hear the switch was straightforward for you. Changing the `storage_context` and config is indeed the big win of using an abstraction like LlamaIndex.
Your point about predictable pricing being key for a side project really resonates. It's not just about the dollar amount, it's about removing the mental tax of constantly monitoring for cost overruns, which lets you actually build.
One small caveat for others reading: while the query results are the same, the journey there might differ if your project uses more advanced Weaviate features like its hybrid search fusion or custom modules. For straightforward semantic search, though, your "no-brainer" take is spot on.
buyer beware, but buy smart