Split Mongo is the term used for the new edX modulestore. Split Mongo is built on mongoDB. For information about mongoDB, see the mongoDB website.
The “split” in Split Mongo refers to how a course is split into three types of information:
This separation of identity, structure, and content enables course authors to use more advanced capabilities when developing and managing courses.
In the Split Mongo data model, edX courses are split into three collections:
The course index is a dictionary that stores course IDs. Each course ID points to a course structure.
The course index supports multiple branches of a course. The index can store multiple entries for a course ID, with each entry pointing to a different course structure that corresponds to a different branch.
As currently implemented, for each course, there is a branch for both the published and draft versions of the course. The published and draft branches of the course point to different structures.
In the edX Platform:
The edX Platform enables you to rerun a course. When you rerun a course, a new course index is created. The new course index points to the same course structure as the original course index.
The course structure defines, or outlines, the content of a course.
A course structure is made up of blocks in a tree data structure. Blocks are objects in a course, such as the course itself, sections, subsections, and units. A block can reference other blocks; for example, a section references one or more subsections. Each block has a unique ID that is generated by the edX Platform.
Each block in the course structure points to an XBlock definition. Different blocks, in the same or in different structures, can point to the same definition.
Course structures, and each block within a structure, are versioned. That is, when a course author changes a course, or a block in the course, a new course structure is saved; the previous course structure, and previous versions of blocks within the structure, remain in the database and are not modified.
XBlock definitions contain the content of each block. For some blocks, such as sections and subsections, the definition consists of the block’s display name. For components, such as HTML or problem components, the definition also contains the content of the object. A definition can be referenced by multiple blocks.
XBlock definitions are versioned. That is, when a course author changes content, a new XBlock definition for that object is saved; the previous definition remains in the database and is not modified.
The Split Mongo data model enables the edX Platform to implement advanced content management functionality. Specifically, Split Mongo is designed to enable:
While these capabilities are not fully implemented in the edX Platform, Split Mongo is designed to allow future enhancements that enable these content management capabilities.
Split Mongo enables multiple branches of a course. The course index <Course Index>_ can have multiple entries for a course ID, each of which points to a different structure.
The edX Platform currently uses a draft and a published branch for a course. Future enhancements may use other branches.
In Split Mongo, every change to a course or a block within the course is saved, with the time and user recorded.
Versioning enables future enhancements such as allowing course authors to revert a course or block to a previous version.
Future enhancements to the edX Platform can allow course authors to reuse an XBlock in multiple contexts, streamlining course development and maintenance.