What do “content addressing” and “explicit addressing” mean? Can you give an example?
Peter Bowyer
2

I guess you can think of 3 kinds of ID’s that refer to some piece of data:

  1. Non-versioned: person-23
  2. Versioned: person-23-rev8
  3. Content addressable: d670460b4b4aece5915caf5c68d12f560a9fe3e4.

Both #2 and #3 are referencing something that, in theory, never changes, a snapshot. #3 just makes that more guaranteed. We mostly just talking about a hash of the content.

One other huge difference (assuming noms is like git): Person-23-rev8 is a reference to a document (assuming something like CouchDB) whereas d670460b4b4aece5915caf5c68d12f560a9fe3e4 is reference to an entire DB. It represents a snapshot of the entire db at any given time. Thus, a you also have the ability (as a side effect) to reference a snapshot of any subset of the DB:

d670460b4b4aece5915caf5c68d12f560a9fe3e4/person-23

Imaging your customer reported a bug in a database app. They could send you:

  1. the error message
  2. what they were doing at the time
  3. and a hash, representing the db state, exactly as it was when the problem occurred.

How cool is that!