Здравствуйте, Sinclair, Вы писали:
S>Интрига не в этом. Интрига — что, если у нас внутри этой таблички есть регион 1000*1000, в каждой из ячеек которого написано R[-1]C[-1]+1. S>И вот у нас пользователь пишет в левом верхнем углу этого региона число 42. За какое время мы раздадим это изменение остальным 999 пользователям?
Ответ — когда-нибудь. В любом случае на сервере или в кластере выполняем все расчеты, исходим из того, что у нас не должно быть грязных чтений, поэтому пока идет обработка ячейки блокируются. Оповещаем пользователей лениво, например каждые 200 мс, то есть аккумулируем изменения и отправляем одним батчем. Появляется 2 кейса:
1. Обработка выполнилась быстрее и пользователь получил актуальные данные
2. Обработка в процессе и в таком случае у пользователя изменяемые ячейки становятся недоступными для редактирования
Оптимизировать здесь надо в первую очередь время обработки, тут такая история: кластеризация, параллельная обработка не связанных цепочек. Если формулы сложные, то это может занимать долгое время, но чудес не бывает, мы должны либо блокировать изменяемые ячейки, либо отдавать грязные данные — это уже вопрос к продукту.