When architecting a system for enterprise exhibitions, the standard cloud-first approach has a fatal flaw: physical crowd density destroys local networks.
If you are tasked with building an event reporting platform with live dashboards, you cannot assume reliable TCP handshakes at the edge. At massive Saudi Vision 2030 events in Riyadh, tens of thousands of attendees arrive within a one-hour window. This density saturates cellular macrocells and crashes venue Wi-Fi. If your physical turnstiles or exhibitor lead scanners require a round-trip cloud API call to validate a badge or update the dashboard, the entire venue will gridlock.
To solve this for the GCC event management software market, we engineered an offline-first telemetry pipeline. Here is how StampIQ builds edge-resilient access control and live reporting dashboards using Go, passive UHF RFID, and SQLite.
1. Pushing Persistence to the Edge (SQLite WAL)
Instead of relying on cloud endpoints, we deploy industrial edge controllers at every physical gate. These controllers interface directly with passive UHF RFID portals via raw TCP sockets, resolving up to 400 tag backscatters per second.
To ensure gates open in under 5 milliseconds regardless of internet connectivity, we use an embedded SQLite database running Write-Ahead Logging (WAL) directly on the edge node.
go
package edge
import (
"database/sql"
"log"
_ "[github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3)"
)
func InitializeEdgeDB() *sql.DB {
// WAL mode decouples rapid RFID reads from background cloud syncs
db, err := sql.Open("sqlite3", "file:/var/lib/stampiq/edge.db?_journal_mode=WAL&_synchronous=NORMAL")
if err != nil {
log.Fatalf("Critical: Edge DB failed to initialize: %v", err)
}
// Optimize for rapid, high-concurrency inserts
db.Exec(`PRAGMA temp_store = MEMORY;`)
db.Exec(`PRAGMA mmap_size = 268435456;`) // 256MB memory map
// Local telemetry table
db.Exec(`
CREATE TABLE IF NOT EXISTS access_telemetry (
id TEXT PRIMARY KEY,
epc_hash TEXT NOT NULL,
zone_id TEXT NOT NULL,
access_granted INTEGER NOT NULL,
epoch_ms INTEGER NOT NULL,
synced INTEGER DEFAULT 0
);
CREATE INDEX IF NOT EXISTS idx_sync_queue ON access_telemetry(synced) WHERE synced = 0;
`)
return db
}
WAL mode ensures that the goroutine handling the high-speed RFID scanner can continuously INSERT access records without being locked by the separate background worker attempting to sync those records to the cloud.
2. Ingesting Telemetry via Redis Streams
When the venue network is active (or recovers from a dropout), dozens of edge nodes simultaneously flush their synced = 0 buffers. To prevent write-locking our primary PostgreSQL database, we use a Go-based ingestion microservice that pushes payloads directly into Redis Streams.
Go
func IngestTelemetryBatch(w http.ResponseWriter, r *http.Request) {
var batch TelemetryBatch
json.NewDecoder(r.Body).Decode(&batch)
pipe := rdb.Pipeline()
for _, record := range batch.Records {
// O(1) append to an immutable in-memory log
pipe.XAdd(ctx, &redis.XAddArgs{
Stream: "stream:venue_telemetry",
Values: map[string]interface{}{
"epc": record.EPCHash,
"zone": record.ZoneID,
"status": record.AccessGranted,
"ts": record.EpochMS,
},
})
}
if _, err := pipe.Exec(ctx); err != nil {
http.Error(w, "Ingestion Failed", http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusAccepted)
}
3. Powering the Live Analytics Dashboard
A fleet of backend workers consumes stream:venue_telemetry using Redis Consumer Groups. These workers calculate rolling aggregations and broadcast them via WebSockets to our event analytics dashboard.
This real-time architecture powers two critical operational features:
Live Civil Defense Enforcement: The workers maintain automated, millisecond-precision headcounts for every enclosed hall by calculating the delta between IN and OUT portal scans. If a room hits 90% capacity, the WebSocket payload triggers a color-coded alert on the floor manager's dashboard.
Exhibitor Lead Tracking in Saudi Arabia: Traditional lead retrieval requires attendees to stop and scan barcodes. By passively tracking RFID movement, our pipeline allows corporate sponsors to open their own localized dashboards and watch verifiable metrics—such as zone footfall and average dwell time—update in real time.
Conclusion
When building enterprise hardware ecosystems, network failure is a baseline assumption. By pushing data persistence to the edge with SQLite and decoupling ingestion with Redis Streams, you can transform ticketing into a mission-critical security asset.
To explore how this edge-resilient architecture scales for massive government summits, check out the infrastructure behind StampIQ's real-time event analytics platform.
Top comments (0)