Difference between revisions of "ContentEngine"

 

(7 intermediate revisions by 2 users not shown)



Line 2: Line 2:
  
 
Our engine borrows heavily from the concepts of the [http://git.or.cz/ Git - Fast Version Control System].  
 
Our engine borrows heavily from the concepts of the [http://git.or.cz/ Git - Fast Version Control System].  
 
Consider the Content Engine as a graph where
 
 
Vertex = Particular version of a document
 
Edge = Connecting different versions of documents
 
Name = Name points to a vertex i.e. document
 
 
 
Lets consider someone who creates a document with a name "Alex". Alex name points to a particular version of
 
If a single name points to multiple vertices(documents) then we have ambiguity for choosing a document based on its name e.g "cricket" name can actually point to the bug cricket and game cricket.
 
 
  
 
To understand how Content Engine works, lets take an example in which Alex and Bob edit documents in the content engine. Lets say Alex creates a document named "ABC" in the content engine. Lets take the steps through which the Content Engine will go through
 
To understand how Content Engine works, lets take an example in which Alex and Bob edit documents in the content engine. Lets say Alex creates a document named "ABC" in the content engine. Lets take the steps through which the Content Engine will go through
  
* Intially, content engine wont have any name "ABC" and any such document in the system.
+
* Intially, Content Engine wont have any name "ABC" that live in the system.
* By creating the document "ABC", the system will add a name "ABC" in our engine and will point this to a vertex i.e. first version of this document.
+
* By creating the document "ABC", the system will add a name "ABC" in the engine and will point this to a vertex(chunk) i.e. first version of this document.
 
ABC ---> ( doc1 )
 
ABC ---> ( doc1 )
* Now Alex edits the document and saves another version. At this stage, our system will add another vertex and will point the name "ABC" to this new version
+
* Now Alex edits the document and saves another version. At this stage, our system will add another vertex and will now point the name "ABC" to this newer version
 
(doc1) -> (doc2)
 
(doc1) -> (doc2)
 
             ^
 
             ^
 
             |
 
             |
 
           ABC
 
           ABC
So, now ABC points to doc2 i.e. the new version of the document.
+
So, now ABC now points to doc2 i.e. the new version of the document.
 
* Now, another user Bob comes and they both start editing the document pointed to by name "ABC" and Bob creates a new version
 
* Now, another user Bob comes and they both start editing the document pointed to by name "ABC" and Bob creates a new version
 
(doc1) -> (doc2) -> (doc3)
 
(doc1) -> (doc2) -> (doc3)
Line 31: Line 20:
 
                     ABC
 
                     ABC
 
* Alice and Bob now decides that they have different views on topic "ABC" and they rather have their own versions of this topic. So, they the content engine looks like
 
* Alice and Bob now decides that they have different views on topic "ABC" and they rather have their own versions of this topic. So, they the content engine looks like
 +
                      -----> (doc5) <--- ABC
 +
                      |
 +
(doc1) -> (doc2) -> (doc3) -> (doc4) <--- ABC
  
(doc1) -> (doc2) -> (doc3) -> (doc4) -> (doc5) <--- ABC
+
so, Alice has her thoughts in doc4 and Bob in doc5.
                                ^
+
* Later on, their ideas again intersect and now they would like to have their pages combined again on the topic ABC.
                                |
+
So, Content Engine now takes the sophisticated union of these documents and merge them in a single document i.e. doc6.
                              ABC
+
                      -----> (doc5) -> (doc6) <---- ABC
so, Alice has a version of doc4 and Bob has doc5.
+
                      |                  |
 
+
(doc1) -> (doc2) -> (doc3) -> (doc4) -----
 
 
  
  
 +
* The two different chunks with different names might intersect(i.e. their contents are same) at some point in time. The chunks might merge at this stage and follow the same path onwards or they may take the different paths altogether. At this stage, the users may decide to merge the two names together that is only one chunk with two names pointing to it OR they may want to follow different paths with names pointing to different chunks.
  
* We have a big content dictionary and it is stored in normal files on a file system.
+
= [[OfflineEditing]] =
* Content Engine ensures to properly synchronizes the changes made by people using [[OfflineEditing]] i.e. the offline mode.
 
*
 
  
 +
Users can edit documents in the offline mode. Just to make sure that they users have the latest copy of the chunk, the Content Engine send the hash along with the document. So, when user tries to synchronize with the server, system knows whether he had the latest copy of the chunk or the old one. If the user has the latest copy, the Content Engine just updates the page and point the name to the latest chunk.
  
The way we think to solve this problem is by letting our content engine to take the union of the content changes that the editors have made.
+
In case, the user don't have the latest copy when they try to synchronize then they are given an option to merge the document with the latest copy or to overwrite the latest copy. The Content Engine will highlight the changes in the latest version and the users version.

Latest revision as of 11:05, 6 May 2007

The ContentEngine is the foundation on which TopSoil is built.

Our engine borrows heavily from the concepts of the Git - Fast Version Control System.

To understand how Content Engine works, lets take an example in which Alex and Bob edit documents in the content engine. Lets say Alex creates a document named "ABC" in the content engine. Lets take the steps through which the Content Engine will go through

  • Intially, Content Engine wont have any name "ABC" that live in the system.
  • By creating the document "ABC", the system will add a name "ABC" in the engine and will point this to a vertex(chunk) i.e. first version of this document.

ABC ---> ( doc1 )

  • Now Alex edits the document and saves another version. At this stage, our system will add another vertex and will now point the name "ABC" to this newer version

(doc1) -> (doc2)

           ^
           |
          ABC

So, now ABC now points to doc2 i.e. the new version of the document.

  • Now, another user Bob comes and they both start editing the document pointed to by name "ABC" and Bob creates a new version

(doc1) -> (doc2) -> (doc3)

                     ^
                     |
                    ABC
  • Alice and Bob now decides that they have different views on topic "ABC" and they rather have their own versions of this topic. So, they the content engine looks like
                      -----> (doc5)  (doc2) -> (doc3) -> (doc4)  (doc5) -> (doc6)  (doc2) -> (doc3) -> (doc4) -----


  • The two different chunks with different names might intersect(i.e. their contents are same) at some point in time. The chunks might merge at this stage and follow the same path onwards or they may take the different paths altogether. At this stage, the users may decide to merge the two names together that is only one chunk with two names pointing to it OR they may want to follow different paths with names pointing to different chunks.

OfflineEditing

Users can edit documents in the offline mode. Just to make sure that they users have the latest copy of the chunk, the Content Engine send the hash along with the document. So, when user tries to synchronize with the server, system knows whether he had the latest copy of the chunk or the old one. If the user has the latest copy, the Content Engine just updates the page and point the name to the latest chunk.

In case, the user don't have the latest copy when they try to synchronize then they are given an option to merge the document with the latest copy or to overwrite the latest copy. The Content Engine will highlight the changes in the latest version and the users version.



Retrieved from "http://aboutus.com/index.php?title=ContentEngine&oldid=6566328"