@Article{arpaci-dusseau:jriver,
  author = {Arpaci-Dusseau, Remzi, H.},
  title = {Run-Time Adaptation in {R}iver},
  journal = {ACM Transactions on Computer Systems},
  year = {2003},
  month = {February},
  volume = {21},
  number = {1},
  pages = {36--86},
  publisher = {ACM Press},
  keywords = {distributed query processing, dataflow, pario-bib},
  comment = {River is a dataflow programming environment for database query
  processing applications. River is specifically designed for clusters of
  computers with heterogeneous performance characteristics. The goal of the
  River runtime system is to adapt to "performance faults"--portions of the
  system that perform poorly by dynamically adjusting the transfer of data
  through the dataflow graph. River uses two constructs to build applications:
  a distributed queue that deals with performance faults by consumers, and
  graduated declustering that deals with performance faults of producers. A
  distributed queue pushes data through the dataflow graph at a rate
  proportional to the rate of consumption and adapts to changes in consumption
  rates. Graduated declustering deals with producer performance faults by
  reading from replicated producers. Although River is designed specifically
  for query processing, they briefly discuss how one might adapt scientific
  applications to work in their framework.}
}

