Блокировка в БД Google Realtime
Я вижу, что Google предоставляет API для совместной работы JavaScript: все клиенты видят одну и ту же модель. Недаты (я считаю, между model.beginCompoundOperation
а также model.endCompoundOperation
) считаются атомными и долговечными. Это кажется идеальным для одного контроллера - нескольких зрителей (которые обновляются при обновлении модели), но кажется недостаточным для параллельных приложений, IMO. Поскольку одновременные контроллеры сохраняются, может возникнуть противоречивая модель, когда все они начинают манипулировать моделью, игнорируя другие.
Рассмотрим счетчик идентичности. Вы поддерживаете график. Это твоя модель. Каждый узел должен иметь свой собственный идентификатор. В модели есть единственное значение nextID. Когда клиент создает узел, он увеличивает это поле. Однако вы понимаете, что другой клиент может сделать то же самое одновременно. Они оба увеличили счетчик с 4 до 5. Однако были добавлены два узла. Это показывает, что общий доступ к данным также должен обеспечивать блокировку интерфейса. Я не вижу ничего в Google Realtime API. Это даже не обсуждается. Почему никто, кажется, не замечает и никому нет до этого дела?
1 ответ
Я думаю, что ваши опасения вполне актуальны для базы данных, однако я бы скептически отнесся к использованию Google Realtime API для хранения данных именно таким способом, который вы описываете, если вам требуется, чтобы ваша модель данных имела свойства ACID. Некоторые ограничения, на которые вы ссылаетесь, обсуждаются на этой странице, а ограничения и поведение составных операций обсуждаются здесь.
Что касается вашей ссылки на составные операции, то особый интерес представляет следующая ссылка:
Однако, хотя изменения, сделанные в составной операции, доставляются вместе, они не являются атомарными. Возможно, что из-за разрешения конфликта некоторые изменения в составной операции никогда не будут доставлены.
Модель данных в Realtime API выполняет разрешение конфликтов для изменений, которые вы вносите в нее, вместо того, чтобы гарантировать, что операция будет иметь именно тот эффект, который вы запрашивали. Хранение данных, структурированных как ваше описание, и выполнение операций, требующих блокировки, - плохие варианты. Первая ссылка содержит ссылку, которая описывает, как вы можете использовать модель в реальном времени для выполнения общей математики.