Dremel answers a query by scattering it down a tree of servers and gathering the results back up.
Dremel starts with Colossus, the storage, a file store. Clients fire queries as API calls to a query manager, which forwards the query to a root.
- The root sends the query to all relevant shards. A shard that cannot hold an answer is not picked up.
- Each shard is a parent node to the nodes under it, through many intermediate layers, down to the leaves. The leaves hold data on a local disk, with a copy in Colossus.
- Each node aggregates the results of its children and sends them back to its parent. A node that was not used returns zero, the identity of a sum.
The local storage is three way replicated: the same data is stored in three nodes. If L3 does not respond, the parent fires the query again at another node with the same data, such as L6. The copies also distribute load.
Monarch had something similar: a root node, zones and leaves.