Как стать автором
Обновить

Комментарии 9

Если два пользователя будут редактировать одну ячейку, то может потеряться конситсентность.

Хорошее замечание. Вопрос консистентности данных это отдельная тема и не для такой статьи. (как заметил @QtRoS можно посмотреть в сторону Operational transformation)

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

Из простых решений в голову приходит "блокировка" ячейки для остальных пользователей, пока у текущего она в фокусе. Интересно посмотреть, как это реализовано в оригинальном Google Sheets

@Suvitruf

Эта статья заинтересовала тем, что сделано все с нуля и на коленке, должно быть понятно новичкам. И я как раз ожидал освещения проблем данного подхода, почему реальный проект по созданию Google Sheets не надо так начинать.
А в других статьях берут что-то готовое вроде yjs или hypercore и концентрируются на перформансе: кастомных CRDT, ленивой отрисовке в канвас, быстрого трекингу зависимостей. Или на UX/UI, где тоже можно найти интересные проблемы.

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

Честно говоря, не в курсе какие используются коробочные имплементации CRDT, у меня в этой области экспертиза небольшая

Про самое главное то и не написали — про одновременную работу несколькими пользователям и поддержку консистентности при одновременном редактировании одних и тех же данных =/

@fransua @Suvitruf
данной проблемы нет, это ж websocket! одновременно редактировать одну ячейку не возможно т.к. невозможно одновременно зайти в одну ячейку, хотя бы потому что протокол последовательный и данные придут от одного клиента раньше. как ни крути. ну а раз пришли данные на занятость ячейки - сервер остальным просто разошлёт команды и данная ячейка у остальных должна "заблокироваться" для изменения..

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

Лично для меня Google Sheets интересен тем что видно кто и что отредактировал, есть иcтория изменений на которую можно откатиться. Аналогичную финкциональность можно разработать на основе sharedb или с аналогами.

Вам успехов с освоением новых технологий ))

Посмотрю что за зверь такой sharedb, спасибо)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации