Моделирование такой функции, как github для комментирования строк - PullRequest
2 голосов
/ 27 апреля 2011

Я создаю систему, которая позволяет пользователям создавать контент и редактировать его, сохраняя доступ ко всем предыдущим версиям. В некотором смысле вы можете подумать о том, как StackOverflow позволяет людям публиковать вопрос, затем редактировать вопрос и по-прежнему просматривать все предыдущие версии.

Однако мои пользователи должны иметь возможность выделять текст в контенте и добавлять комментарии к этому конкретному тексту. Таким образом, вместо добавления комментария ко всему большому количеству контента (как в SO), они могут указывать на конкретное слово или фразу в контенте и прикреплять к нему комментарий.

Когда я отображаю большой контент, мне нужно показать все комментарии, которые когда-либо были добавлены в него, независимо от того, что содержит текущая версия. Поэтому, если слово или фраза, к которой был прикреплен комментарий, было удалено, мне все равно нужно показать комментарий, хотя этот комментарий может как-то указывать, что он не прикреплен в текущей версии.

Github имеет функцию, которая позволяет участникам добавлять комментарии к определенной строке исходного кода. Это довольно близкое приближение к тому, что я хочу сделать. Однако, я верю в Github, комментарий прикреплен только к конкретной версии этого файла. В следующих версиях этого файла этот комментарий не будет отображаться.

Программное обеспечение, подобное Microsoft Word, также имеет такие функции. Но моим приложением будет веб-приложение с функциями совместной работы среди пользователей, поэтому несколько пользователей могут комментировать любой данный контент.

Я рассматриваю возможность использования решения NoSQL, такого как CouchDB или MongoDB, для хранения больших двоичных объектов контента и комментариев. Другой вариант - использовать git для поддержки блобов контента и управления версиями, но я не уверен, где я буду хранить информацию комментариев.

Есть предложения о том, как лучше всего моделировать и хранить этот тип информации? Как комментарий будет ссылаться на слова или фразы в содержании? Как лучше узнать, когда комментарий добавлен в текст в текущей версии или нет?

1 Ответ

0 голосов
/ 27 апреля 2011

Вы можете смоделировать таким образом, чтобы у вас был файл (или любой другой подходящий объект, который может содержать метаданные, например, в базе данных) для каждого комментария, сделанного пользователем, и создать определенное соглашение об именах, в котором вы объединяете файлимя комментируемого файла, SHA1 большого двоичного объекта и индекс для нескольких комментариев к каждому файлу.Таким образом, для каждого файла foo может быть что-то вроде:

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

Когда будет зафиксирована новая ревизия файла, будет новый BLOB-объект (или, возможно, старый BLOB-объект, появляющийся снова, начиная с предыдущих версий).файла могут быть идентичны из-за добавления и удаления текста), что люди могут комментировать.Очевидно, что объектам также необходимо знать диапазон комментируемого текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...