Modelar una característica como la de github por comentario de línea

Estoy construyendo un sistema que permite a los usuarios crear contenido y editar ese contenido, manteniendo el acceso a todas las versiones anteriores. En cierto modo, podría pensar en cómo StackOverflow permite a las personas publicar una pregunta, luego editar la pregunta y aún ver todas las versiones anteriores.

Sin embargo, mis usuarios deben poder seleccionar text en el contenido y agregar un comentario a ese text en particular. Por lo tanto, en lugar de agregar un comentario a una burbuja completa de contenido (como en SO), pueden orientar una palabra o frase específica en el contenido y adjuntar un comentario.

Cuando visualizo un blob de contenido, necesito mostrar todos los comentarios que alguna vez se agregaron, independientemente de lo que contenga la versión actual. Por lo tanto, si se eliminó la palabra o frase a la que se adjuntó un comentario, aún debo mostrar el comentario, aunque ese comentario podría indicar de alguna manera que no está adjuntado en la versión actual.

Github tiene una function que permite a los miembros agregar un comentario a una línea específica de código fuente. Esta es una aproximación bastante cercana a lo que quiero hacer. Sin embargo, creo en Github, el comentario se adjunta solo a una versión específica de ese file. Las versiones futuras de ese file no mostrarán ese comentario.

El software como Microsoft Word también tiene características como esta. Pero mi aplicación será una aplicación web con funciones de queueboración entre los usuarios, por lo que varios usuarios pueden comentar cualquier contenido.

Estoy considerando utilizar una solución NoSQL como CouchDB o MongoDB para almacenar los blobs de contenido y los comentarios. Otra opción es usar git para mantener los blobs de contenido y el control de versiones, pero no estoy seguro de dónde almacenaría la información del comentario.

¿Alguna sugerencia sobre cómo mejor modelar y almacenar este tipo de información? ¿Cómo podría un comentario hacer reference a palabras o frases en el contenido? ¿Cómo saber cuándo se adjunta un comentario al text en la versión actual o no?

Podría modelar de forma tal que tenga un file (o cualquier otro object adecuado que pueda contener metadatos, por ejemplo, en una database) para cada comentario hecho por un usuario, y crear una convención de nomenclatura determinada donde combine el nombre del file del file que se comenta, el SHA1 del blob y un índice para múltiples comentarios en cada file. Por lo tanto, para cada file foo, podría tener algo como:

foo-blob1-0 foo-blob1-1 foo-blob1-2 foo-blob1-3 foo-blob2-0 .. foo-blobm-0 .. foo-blobm-n 

Cuando se haya confirmado una nueva revisión del file, aparecerá un nuevo blob (o posiblemente un blob antiguo que aparezca de nuevo, ya que las versiones anteriores del file podrían ser idénticas debido a agregar y eliminar text) que las personas pueden comentar. Obviamente, los objects también necesitan conocer el range del text que se comenta.