  The yearly global production of data is growing exponentially, outpacing the
capacity of existing storage media, such as tape and disk, and surpassing our
ability to store it. DNA storage - the representation of arbitrary information
as sequences of nucleotides - offers a promising storage medium. DNA is
nature's information-storage molecule of choice and has a number of key
properties: it is extremely dense, offering the theoretical possibility of
storing 455 EB/g; it is durable, with a half-life of approximately 520 years
that can be increased to thousands of years when DNA is chilled and stored dry;
and it is amenable to automated synthesis and sequencing. Furthermore,
biochemical processes that act on DNA potentially enable highly parallel data
manipulation.
  Whilst biological information is encoded in DNA via a specific mapping from
triplet sequences of nucleotides to amino acids, DNA storage is not limited to
a single encoding scheme, and there are many possible ways to map data to
chemical sequences of nucleotides for synthesis, storage, retrieval and data
manipulation. However, there are several biological, error-tolerance and
information-retrieval considerations that an encoding scheme needs to address
to be viable.
  This comprehensive review focuses on comparing existing work done in encoding
arbitrary data within DNA in terms of their encoding schemes, methods to
address biological constraints and measures to provide error correction. We
compare encoding approaches on the overall information density and coverage
they achieve, as well as the data-retrieval method they use (i.e., sequential
or random access). We also discuss the background and evolution of the encoding
schemes.
