The CRATEDB route stores MQTT messages in CrateDB, a distributed SQL database optimized for time-series and machine data. It combines the familiarity of SQL with the scalability needed for IoT workloads.
CrateDB excels at high-volume time-series data with fast ingestion and SQL query capabilities. Use it when you need real-time analytics on sensor data at scale.
DEFINE ROUTE SensorDB WITH TYPE CRATEDB ADD CRATEDB_CONFIG WITH HOST "cratedb.example.com" WITH PORT '5432' WITH DATABASE "iot" WITH USERNAME "crate" WITH PASSWORD "secure_password" ADD EVENT StoreSensorReading WITH SOURCE_TOPIC "sensors/+/reading" WITH QUERY "INSERT INTO sensor_data (ts, sensor_id, value) VALUES (?, ?, ?)"
DEFINE ROUTE TimeSeriesDB WITH TYPE CRATEDB ADD CRATEDB_CONFIG WITH HOST "cratedb.example.com" WITH PORT '5432' WITH DATABASE "iot" WITH USERNAME "crate" WITH PASSWORD "secure_password" ADD EVENT StoreTimeSeries WITH SOURCE_TOPIC "sensors/+/reading" WITH DESTINATION_TOPIC "db/crate/status" WITH QUERY "INSERT INTO sensor_data (ts, sensor_id, value) VALUES (?, ?, ?)"
Optimized for high ingestion rates:
Copy
Ask AI
DEFINE ROUTE MetricsDB WITH TYPE CRATEDB ADD CRATEDB_CONFIG WITH HOST "cratedb.example.com" WITH PORT '5432' WITH DATABASE "metrics" WITH USERNAME "metrics_writer" WITH PASSWORD "secure_password" ADD EVENT StoreMetrics WITH SOURCE_TOPIC "metrics/#" WITH QUERY "INSERT INTO metrics (ts, topic, data) VALUES (?, ?, ?)"
Route to different tables by topic:
Copy
Ask AI
DEFINE ROUTE MultiTableDB WITH TYPE CRATEDB ADD CRATEDB_CONFIG WITH HOST "cratedb.example.com" WITH PORT '5432' WITH DATABASE "iot" WITH USERNAME "crate" WITH PASSWORD "secure_password" ADD EVENT StoreSensors WITH SOURCE_TOPIC "sensors/#" WITH QUERY "INSERT INTO sensors (ts, topic, data) VALUES (?, ?, ?)" ADD EVENT StoreAlerts WITH SOURCE_TOPIC "alerts/#" WITH QUERY "INSERT INTO alerts (ts, topic, data) VALUES (?, ?, ?)"
-- Partitioned time-series tableCREATE TABLE sensor_data ( ts TIMESTAMP WITH TIME ZONE, sensor_id TEXT, value DOUBLE PRECISION) PARTITIONED BY (ts);-- Metrics with JSON storageCREATE TABLE metrics ( ts TIMESTAMP WITH TIME ZONE, topic TEXT, data OBJECT(DYNAMIC)) PARTITIONED BY (ts);