Комментарии 9
Если два пользователя будут редактировать одну ячейку, то может потеряться конситсентность.
Вам и @Suvitruf: можно посмотреть в сторону Operational Transformation и CRDT
Хорошее замечание. Вопрос консистентности данных это отдельная тема и не для такой статьи. (как заметил @QtRoS можно посмотреть в сторону Operational transformation)
В данном варианте, клиенты получают новые сообщения по мере их поступления в последовательном порядке. Одновременно редактировать одну и ту же ячейку по умолчанию может неограниченное число пользователей. Обработка таких случаев, когда одновременно используются одни и те же данные, когда у клиентов разная скорость связи и т.д. опущена, поскольку требует уже нетривиальных решений.
Из простых решений в голову приходит "блокировка" ячейки для остальных пользователей, пока у текущего она в фокусе. Интересно посмотреть, как это реализовано в оригинальном Google Sheets
Эта статья заинтересовала тем, что сделано все с нуля и на коленке, должно быть понятно новичкам. И я как раз ожидал освещения проблем данного подхода, почему реальный проект по созданию Google Sheets не надо так начинать.
А в других статьях берут что-то готовое вроде yjs
или hypercore
и концентрируются на перформансе: кастомных CRDT, ленивой отрисовке в канвас, быстрого трекингу зависимостей. Или на UX/UI, где тоже можно найти интересные проблемы.
Собственно на новичков и рассчитана статья) попробовать создать что-то интересное с нуля. Плюсы и минусы подхода освещать особо нет смысла, так как весь проект "образовательный". Какие проблемы в действительности встречаются на практике - вот эта была бы интересная тема для статьи, согласен.
Честно говоря, не в курсе какие используются коробочные имплементации CRDT, у меня в этой области экспертиза небольшая
Про самое главное то и не написали — про одновременную работу несколькими пользователям и поддержку консистентности при одновременном редактировании одних и тех же данных =/
@fransua @Suvitruf
данной проблемы нет, это ж websocket! одновременно редактировать одну ячейку не возможно т.к. невозможно одновременно зайти в одну ячейку, хотя бы потому что протокол последовательный и данные придут от одного клиента раньше. как ни крути. ну а раз пришли данные на занятость ячейки - сервер остальным просто разошлёт команды и данная ячейка у остальных должна "заблокироваться" для изменения..
Если планируете дальше смотреть в сторону совместного редактирования то проект sharedb возможно будет вам интересен. Проект старый и уже активно не разрабатывается, хотя периодически они выпускают багфиксы.
Лично для меня Google Sheets интересен тем что видно кто и что отредактировал, есть иcтория изменений на которую можно откатиться. Аналогичную финкциональность можно разработать на основе sharedb или с аналогами.
Вам успехов с освоением новых технологий ))
Создание «Google Sheets» через Websockets на Node.js