  Distributed data aggregation is an important task, allowing the decentralized
determination of meaningful global properties, that can then be used to direct
the execution of other applications. The resulting values result from the
distributed computation of functions like COUNT, SUM and AVERAGE. Some
application examples can found to determine the network size, total storage
capacity, average load, majorities and many others.
  In the last decade, many different approaches have been proposed, with
different trade-offs in terms of accuracy, reliability, message and time
complexity. Due to the considerable amount and variety of aggregation
algorithms, it can be difficult and time consuming to determine which
techniques will be more appropriate to use in specific settings, justifying the
existence of a survey to aid in this task.
  This work reviews the state of the art on distributed data aggregation
algorithms, providing three main contributions. First, it formally defines the
concept of aggregation, characterizing the different types of aggregation
functions. Second, it succinctly describes the main aggregation techniques,
organizing them in a taxonomy. Finally, it provides some guidelines toward the
selection and use of the most relevant techniques, summarizing their principal
characteristics.
