TinyDB is a query processing system for extracting information from a network of TinyOS sensors. Unlike existing solutions for data processing in TinyOS, TinyDB does not require you to write embedded C code for sensors. Instead, TinyDB provides a simple, SQL-like interface to specify the data you want to extract, along with additional parameters, like the rate at which data should be refreshed -- much as you would pose queries against a traditional database. Given a query specifying your data interests, TinyDB collects that data from motes in the environment, filters it, aggregates it together, and routes it out to a PC. TinyDB does this via power-efficient in-network processing algorithms.

To use TinyDB, you install its TinyOS components onto each mote in your sensor network. TinyDB provides a simple Java API for writing PC applications that query and extract data from the network; it also comes with a simple graphical query-builder and result display that uses the API.

The primary goal of TinyDB is to make your life as a programmer significantly easier, and allow data-driven applications to be developed and deployed much more quickly than what is currently possible. TinyDB frees you from the burden of writing low-level code for sensor devices, including the (very tricky) sensor network interfaces. Some of the features of TinyDB include:

Metadata Management: TinyDB provides a metadata catalog to describe the attributes and commands that are available for querying and invocation in the sensor network. Attributes can be sensor readings or internal software/hardware parameters. Commands can range from parameter tuning to physical actuations. Attributes and commands can be created through the TinySchema components in TinysOS.

High Level Queries: TinyDB uses a declarative query language that lets you describe the data you want, without requiring you to say how to get it. This makes it easier for you to write applications, and helps guarantee that your applications continue to run efficiently as the sensor network changes.

Network Topology: TinyDB manages the underlying radio network by tracking neighbors, maintaining routing tables, and ensuring that every mote in the network can efficiently and (relatively) reliably deliver its data to the user.


Multiple Queries: TinyDB allows multiple queries to be run on the same set of motes at the same time. Queries can have different sample rates and access different sensor types, and TinyDB efficiently shares work between queries when possible.

Incremental Deployment via Query Sharing: To expand your TinyDB sensor network, you simply download the standard TinyDB code to new motes, and TinyDB does the rest. TinyDB motes share queries with each other: when a mote hears a network message for a query that it is not yet running, it automatically asks the sender of that data for a copy of the query, and begins running it. No programming or configuration of the new motes is required beyond installing TinyDB.

TinyDB is also at the heart of the Tiny Application Sensor Kit (TASK), which provides a suite of java based logging, configuration, and visualization tools to assist in sensor network deployment. More information about TASK is available here.