title: Neo4j / Strategy to keep history of node changes
body: <p>Let's assume a graph dealing with cars.<br>
  Each <code>Car</code> can evolve over time, and I need to keep track of those changes.<br>
  (in order to be able to track some inconsistency of evolution etc...) </p>
  
  <p>I thought about implementing a <strong>copy-on-write</strong> mechanism (like <a href="http://www.youtube.com/watch?v=XeiiEguxRNs" rel="nofollow">LinkedIn</a> seems to do), meaning creating a complete new <code>Car</code> node each time one of the <code>Car</code>'s properties changes.</p>
  
  <p>I would end up with a graph like this:</p>
  
  <pre><code>(Ferrari)-[:CURRENT]-&gt;(V3)-[:PREVIOUS]-&gt;(V2)-[:PREVIOUS]-&gt;(V1)
  </code></pre>
  
  <p>I'm specifically interested in retrieving the most current version, so it would sound good.     </p>
  
  <p>However, how to deal with the initial <code>Car</code> UUID?          </p>
  
  <p>My <code>Car</code>'s UUID (that is an indexed property to ease queries) is auto-generated through a library (Apache).<br>
  I imagine that if I keep the same initial UUID for each <code>Car</code> version, this might lead to some conflict: "<em>Retrieve the <code>Ferrari</code> whose UUID is 123</em>" => returning more than one result.. 3 results if 3 versions.           </p>
  
  <p><strong>Is it safe and efficient to generate a new brand UUID for each version?</strong>     </p>
  
  <p>Thus, I'm aware than in this case, the only way to retrieve a particular version would then be to traverse the concerned portion of graph until the correct one, and not counting on a simple query on the initial UUID; that still seems very efficient and easy with a simple Cypher query.</p>
  
  <p>I want to keep a generated UUID since having potential "guessable" REST URL (using resource's UUID so) is not advisable.<br>
  Indeed, I could have an UUID being the combination between the <code>Car</code> model and its version, but it seems not enough "safe" with a visibility on my URLS. Any malicious person could easily manage to retrieve an older version just by changing the URL.  </p>