Серия постов с теорией (часто неправильной;) и кодом на Джаве.
Интересное здоровенное видео (58 минут) лекции разработчика (я не досмотрел, но по слухам, они сделали чуть ли не совместный AutoCAD).
Его же доклад.
Это всё очень интересно, но. Я не представляю, как это применить где-либо, кроме текста.
Вот, к примеру, возьмём гипотетическую графовую БД, на которой мы собираемся делать совместный редактор.
У нас есть узел Файл, к которому привязан узел типа Строка дугой ПерваяСтрокаФайла. Строки между собой соединены дугами СледующаяСтрока - "односвязный" список (в кавычках потому, что мы можем ходить по дугам в любом направлении). Одна строка не может быть соединена двумя дугами СледующаяСтрока, что разумно.
(вариант ВСЁ ОДНИМ КУСКОМ неинтересен из-за операций над большим текстом, вариант с нумерацией строк тоже - строки надо перенумеровывать, что накладно, хотя и менее накладно, чем с одним большим куском)
Вставка Строки С1 в Файл производится соединением С1 со строкой С0, после которой мы собираемся вставить её. Удаление производится похожим образом.
Операции внутри строк мы не рассматриваем - OT там вполне сойдут.
Что будет, если два человека создадут строки С1 и С2 (после С0) в Файле параллельно?
Один свяжет С0 и С1, другой свяжет С0 и С2. Созданы две независимые дуги. Прямое распространение изменений приведёт к неправильной БД - С0 подсоединена двумя дугами.
Это можно исправить, передав запрос, меняющий БД: подсоединение С1 после С0 и подсоединение С2 после С0 выполнятся вполне нормально, единственное, порядок строк не гарантирован, может получиться что С0-С1-С2, что С0-С2-С1. Но выполнение запросов вполне можно как-то упорядочить.
Похоже, вылезли OT. ;)
Если в работе с текстом мы работаем с операциями вида "вставить/удалить символы", то здесь получается "вставить/удалить узлы или дуги".
Тем не менее, простой способ обмануть и эту систему: с одной стороны мы отсоединяем С1 от строк С0 и С2 (удаляем строку), с другой мы вставляем строку С2' после С1. Вуаля! Нашей строки С2' видно не будет и появится лишняя связь.
Это всё очень интересно. ;)