I am working on a preliminary data model for a new project that includes 
something similar to a CMS. My question is about how to best handle 
revision history of items and autosave drafts.

The scenario is pretty simple. I have an Item Class that extends V and has 
several standard properties (content, title, etc). The vertex also connects 
to several other vertices (created by User, tagged_as Tag, has_comment 
Comment, etc).

I need to be able to save revision history of (at least some) of the data 
in the Item. I can see two ways of doing this, the first seems a more 
graph-aware strategy:
(adapted from 
http://patrick.wagstrom.net/weblog/2011/09/22/graph-databases-and-revision-history/)

   1. Each Item to actually be connected to a "ItemContent" vertex or 
   something similiar. This ItemContent would hold the properties and 
   connections to the outside world.
   2. Create a new ItemContent record for each revision.
   3. Break the connection between the Item and the Previous ItemContent
   4. Create a new connection between Item and the Current ItemContent
   5. Create a new "previous state" connection between the Current 
   ItemContent and the previous one.
   6. In this way, I have a line of snapshots down through time that 
   maintain all their connections.

This seems a little convoluted to me, but I may just not be wrapping my 
head around Graph Database concepts fully. I also don't know how to 
constrain to, say, 10 revisions.


The other approach would be to have one document Item with a subdocument 
Revisions, and just push previous states into Revisions with a date/time. I 
lose my connection history this way, and I don't know that I like that. I 
don't know why I would need to do advance querying or traversals on 
previous revisions, but I would like to keep the option open unless there 
is a good reason not to.


Item {



   'title': "Title',

   'content': 'This is my new content',

   'revisions': [

       {

           title: 'old title',

           'content': 'old content'

           'archived': date


       },

       {

           title: 'older title',

           'content': 'older content'

           'archived': olderdate


       }


   ]


}




The model becomes even more convoluted when thinking about autosaves for 
each item.


Is there a third option? Is the graph option too convoluted (potentially 
millions of items with at least 10 revisions each).


I really appreciate any thoughts or resources.

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to