One million devices are tracked as they provide continuous position (lat/long) updates and pass in and out of personalized geo-fence boundaries. Alert events are generated whenever a device exits or enters the fence, which is defined individually for each device based on a "home" location and a radius in miles.
The client application creates the set of devices with their geo-fence defintions and then begins generating random device updates. Each device starts at it's home location and then each subsequent update is a based on a "random walk" incremental change from the last position.
The database ingests these updates and keeps a history of the positions for each device. As it processes each update, it also checks to see if this device has a geo-fence enabled and if so, whether the device was previously in-bounds or out-of-bounds. It calculates the distance from "home" to the new location to see if it is in or out of bounds. If this is a change in status, it generates an "exit" or "entry" event record, which would result in a notification to the device owner. All of this logic is found in the "PositionUpdate" stored procedure.
The database schema and stored procedures
The java benchmark client application.
Start the database in the background
Run the client application
Open a web browser to VoltDB Studio
Run some queries:
-- check for events: SELECT * FROM device_event;
-- see the settings for a device: SELECT * FROM devices WHERE id = ?;
-- see the position history for a device: SELECT * FROM device_location WHERE id = ? ORDER BY ts;
When finished, stop the database and clean up any temp files
voltadmin shutdown ./clean.sh