Real-time context
Real-time serving turns FeatureQL into a feature platform for production APIs and online ML inference. Instead of building custom microservices to fetch and combine data from Redis, PostgreSQL, and REST APIs, you declare what you need and FeatureMesh handles the rest.
Data source connectors
FeatureQL connects to operational data stores through three connector types:
| Connector | Function | Best for |
|---|---|---|
| Redis | SOURCE_REDIS() + EXTERNAL_REDIS() | Key-value lookups, cached profiles, feature flags |
| JDBC | SOURCE_JDBC() + EXTERNAL_COLUMNS() | Relational databases (PostgreSQL, MySQL, etc.) |
| HTTP | SOURCE_HTTP() + EXTERNAL_HTTP() | REST APIs, microservices, ML model endpoints |
Each connector follows the same pattern: create a persistent source connection, then reference it in feature definitions. The next three pages walk through each one.
Composing multiple sources
Because features are just named expressions, you can freely mix connectors in a single query. A feature might look up a customer in PostgreSQL, fetch their latest order from Redis, and call an external scoring API over HTTP — all in one request. FeatureMesh resolves the dependency graph and queries each source using its native access pattern. The multi-source queries page shows this in action.
From prototyping to production
Free-form queries work for development and testing, but production deployments should use prepared statements. A prepared statement pre-compiles a feature and its entire dependency graph — including all data source calls — into a single optimized query. Clients call it via REST or gRPC with just the input values, eliminating parsing and resolution overhead. See prepared statements for details.
Real-time constraints
Real-time serving focuses on individual feature retrieval, not analytical queries. A few capabilities from batch analytics are not available:
- No presentation layer:
WHERE,GROUP BY,ORDER BY, andLIMITclauses are not supported in real-time contexts. - No aggregations:
RELATED()andEXTEND()aggregations are not available. Use precomputed aggregates or prematerialized collections of IDs as sources for your features.