#fluid-framework
#fluid-framework
Вопрос:
Например, в FluidFramework/examples/data-objects/badge/src/BadgeClient.tsx:
const changeSelectedOption = (newItem: IBadgeType): void => {
if (newItem.key !== model.currentCell.get().key) {
const len = model.historySequence.getItemCount();
model.historySequence.insert(len, [
{
value: newItem,
timestamp: new Date(),
},
]);
model.currentCell.set(newItem);
}
};
Всегда ли операция вставки истории выполняется успешно / завершается неудачей вместе с операцией настройки ячейки?
Комментарии:
1. Локальное изменение состояния, вероятно, будет атомарным. Но, скажем, две операции отправляются по сети, и одна из них не поступает на сервер, тогда что произойдет с другими клиентами?
Ответ №1:
Не транзакции, но он поддерживает пакеты. Пакеты гарантируют, что никакие другие операции не будут чередоваться между операциями в пакете. Вы можете создать пакет, используя orderSequentially Api
Ответ №2:
Fluid не поддерживает транзакции в традиционном смысле, но у Fluid есть «групповые операции». Они могут быть созданы с помощью orderSequentially api в ContainerRuntime. Некоторые DDS имеют оболочку вокруг этого API уровня контейнера.
Групповые операции позволяют вам объединить группу операций в одно сообщение, чтобы служба упорядоченного заказа добавляла эти операции в общую рассылку заказов по порядку.
Операции могут быть сгруппированы только в одном контейнере, потому что это граница общей рассылки заказов. Операции могут быть сгруппированы по DDS в одном контейнере. Это все еще отличается от транзакции, потому что мы не гарантируем откат предыдущих операций в случае, если более поздняя операция недействительна.
Вы можете увидеть пример в последовательности DDS.
Ниже мы отправим две операции для «hello» и «world» в одной групповой операции, гарантируя, что helloworld будет отправлен сразу без чередования ввода.
const op1 = {
pos: 0,
seg: "hello",
type: MergeTreeDeltaType.INSERT,
}
const op2 = {
pos: 5,
seg: "world"
type: MergeTreeDeltaType.INSERT,
}
const groupOp = {
ops: [op1, op2],
type: MergeTreeDeltaType.GROUP,
}
sharedString.groupOperation(groupOp);
Объект ProseMirror fluid содержит более подробный код
Комментарии:
1. Спасибо, Сэм! Один дополнительный вопрос: похоже, groupOperation() применяется только к одной и той же общей последовательности. Означает ли это, что невозможно принудительно изменить транзакцию 2 разных объекта? Или, может быть, я могу изменить сервер, чтобы включить эту функцию?
2. Вы можете группировать операции в одном контейнере, чтобы они могли влиять на несколько DD в этом контейнере. Измененный ответ для решения последующих вопросов.