Здравствуйте, Тёмчик, Вы писали:
Тё>Что, если получать изменения по ячейке, мержить по Levenshtein distance, "пушить" раздельно. Каждый пользователь со своей копией "репы". В случае, если автоматически смержить не получается- предоставить UI для ручного мержа ячейки. Несмерженную копию документа для каждого юзера тоже можно хранить на сервере как "cloud backup".
Заставить пользователей, не знакомых с версионированием, выполнить слияние? Как-то жёстко.
Мой вариант следующий. Табличные вычисления нужно перенести на клиент, клиенты обмениваются текстовым содержимым ячеек через сервер (в продвинутой версии можно сделать P2P). Изменения ячеек это сообщения с метками времени, поэтому всегда можно определить последнюю версию и избежать рассинхронизации. Сервер так же содержит референсную копию на случай, когда таблица строится с нуля. Из тройки CAP жертвуем Consistency, зато получаем условно-бесплатную масштабируемость. Все остальные методы с расчётом на сервере и отправкой кусками будут очень чувствительны к любым задержкам сети.