  Many distributed storage systems are transactional and a lot of work has been
devoted to optimizing their performance, especially the performance of
read-only transactions that are considered the most frequent in practice. Yet,
the results obtained so far are rather disappointing, and some of the design
decisions seem contrived. This paper contributes to explaining this state of
affairs by proving intrinsic limitations of transactional storage systems, even
those that need not ensure strong consistency but only causality.
  We first consider general storage systems where some transactions are
read-only and some also involve write operations. We show that even read-only
transactions cannot be "fast": their operations cannot be executed within one
round-trip message exchange between a client seeking an object and the server
storing it. We then consider systems (as sometimes implemented today) where all
transactions are read-only, i.e., updates are performed as individual
operations outside transactions. In this case, read-only transactions can
indeed be "fast", but we prove that they need to be "visible". They induce
inherent updates on the servers, which in turn impact their overall
performance.
