Last Tuesday, our robot walked into the kitchen for the 31st time that week. Same route. Same question: "What should I prepare for lunch?"
It had already asked that question. And answered it. And remembered the answer â for exactly 8 hours, until the vector store's TTL kicked in and silently wiped it clean.
That's when I understood: vector databases are solving the wrong problem for embodied AI.
The Semantic Search Trap
Vector databases are brilliant at one thing: finding similar things. "Show me documents about cooking." "Find images that look like this." Great. Wonderful.
But a robot standing in a kitchen isn't asking semantic questions. It's asking:
- "Have I been here before?" (spatial + temporal)
- "How long has the stove been on?" (time-series)
- "Is this object in the same position as last time?" (structured state)
Vector similarity can't answer any of these. You need a database that thinks in sequences, timestamps, and relationships â not just embeddings.
What Robots Actually Need
After 3 months of building memory systems for autonomous robots, here's what actually matters:
1. Temporal continuity. A robot doesn't just need to know what happened. It needs to know when it happened and in what order. Did the person enter before or after the door opened? Vector stores have no concept of time.
2. Spatial context. "Kitchen" isn't a semantic cluster â it's a location with boundaries, objects, and states. Storing "kitchen" as a vector means you can find similar contexts, but you can't answer "has this specific kitchen been visited in the last hour?"
3. Structured state. The stove's temperature. The door's position. The battery level. These are key-value pairs that change over time and need to be queried efficiently without converting everything into vectors.
4. Multimodal fusion. Sensor data, LLM outputs, camera frames â all need to be stored together and queried across modalities.
The Hybrid Stack Problem
The industry answer to this is usually: "Use a vector DB for embeddings + Redis for caching + InfluxDB for time-series + PostgreSQL for state."
That's 4 databases. 4 connection pools. 4 failure modes. And about 50ms of latency per query on a good day.
For a robot making decisions in real-time, that's not engineering â that's architectural debt.
A Better Approach: Embedded Multimodal Storage
The alternative is a single embedded database that handles all of these natively:
use motedb::{Database, Store};
let db = Database::open("robot_memory.motedb")?;
let visit = db.store("visits").insert(serde_json::json!({
"location": "kitchen",
"timestamp": Utc::now(),
"robot_id": "unit_7",
"duration_seconds": 342
}))?;
db.store("sensors").upsert("stove_temp", serde_json::json!({
"value": 187.5,
"unit": "celsius",
"last_updated": Utc::now()
}))?;
let recent = db.store("visits")
.query()
.filter(|v| v["location"] == "kitchen")
.filter(|v| v["timestamp"] > Utc::now() - Duration::hours(1))
.first()?;
No separate services. No network calls. No latency budget eaten by database round-trips.
The Real Insight
Vector databases are infrastructure for retrieval. Robots need infrastructure for memory.
Memory isn't just "find the most similar thing." It's: what happened, when, where, and how does it affect what happens next?
That's a fundamentally different data problem. And it's why the next generation of embedded databases â built in Rust, designed for edge AI â are approaching it differently.
What's your experience with robot memory systems? Do you use separate databases for different data types, or have you found a better unified approach?