@ fluidframework/ register-collection (英语)
协商一致的登记册收集是一个分布式数据结构(DDS),它拥有一套登记册及其在同时更新过程中生成的版本。 在最简单的定义中,单一登记册上的两个更新如果它们之间没有因果关系(即也不知道另一个)则同时进行。 在这种同时更新的情况下,登记册内部储存所有可能的版本.
使用 Fluid 框架库
对于依赖流体框架库的公共API,我们建议 ^ (caret)版本范围.
例如,使用 ^1.3.4。 。 。 .
依赖不稳定的API,例如: beta API,我们推荐一个更具限制性的版本范围.
例如,使用一个 ~ 版本范围.
安装
运行此命令以安装软件包 :
npm i @fluidframework/register-collection
从此软件包导入
此软件包使用 packet.json 导出 通过支持级别将API分离. 有关支助保障的信息改为: API 支持级别。 。 。 .
导入 public API 从 @fluidframework/register-collection。 。 。 .
导入 legacy API 从 @fluidframework/register-collection/legacy。 。 。 .
API 文档
读取 @ fluidframework/ register-collection (英语) API 文档 https://fluidframework.com/docs/apis/register-collection (中文(简体) )。 。 。 .
创建和实例类型
使用 ConsensusRegisterCollection.create(runtime) 创建收藏。 使用 ConsensusRegisterCollection.getFactory() 登记工厂。 例如,说明: ConsensusRegisterCollection 类型是用于 IConsensusRegisterCollection。 。 。 .
import {
ConsensusRegisterCollection,
type IConsensusRegisterCollection,
} from "@fluidframework/register-collection/legacy";
const registers: IConsensusRegisterCollection<string> =
ConsensusRegisterCollection.create(runtime);
在流体中检测货币
在分布式系统文献中,检测通由需要某种形式的逻辑/物理时钟. 在复制数据库(如:dynamodb)中使用的一种受欢迎的技术称为版本向量,每个键存储一个集合 [time, value] tu. time 基本上是用于决定更新货币的参考钟。 每次更新到一个密钥包括: time,主要用于说明如何 caught up 复制品是在更新时复制的.
在Fluid中,每个操作都包含一个参考序列编号(refSeq)),主要指客户端在更新过程中(从序列号来看)是如何被抓住的. 我们可以利用这个属性来实施类似的货币模型. 数学上,如果更新有 refSeq N,它可以覆盖/丢弃任何其他先前的值 sequenceNumber (seq) <= N。这样做是安全的,因为客户在发布自己的更新之前,必须看到所有这些更新。 因此,这一更新与这些覆盖的更新不同时进行。 然而,更新与任何其他更新同时进行 seq > N因此,这些版本仍然保留.
解决冲突政策
以下是发展事务司执行的政策:
-
版本:返回所有存储的并行版本. App负责解决冲突。 亚马逊基于dynamodb的购物车政策是这一政策的受欢迎的例子.
-
LWW: 键的上一个写入总是覆盖任何先前的写入( aka last write win policy) 。 这与Fluid的"共享地图"政策完全相同.
-
原子:政策遵循共享分布式锁的相同语义. 在所有同步更新中,只有第一位作者获胜. 在分布式系统文献中,注册更新政策称为
Atomic。此行为需要可线性化的注册。 可线性寄存器的行为仿佛只有一个数据拷贝,而且每个操作似乎都在某一时间点上在解剖上生效. 这个定义意味着操作按照定义明确的顺序执行. 在同时更新时,我们执行compare-and-set操作,我们比较一个存储的寄存器seq与来件refSeq。最早的操作覆盖存储seq赢是因为每个客户都同意价值 因此,我们可以安全返回第一个值.
客户最低要求
Fluid框架客户端库支持此文档中的平台. 这些要求有意具有限制性. 在一个主要的版本系列中,我们可以放松这些要求,但我们不能使其更严格. 对于长期支持(LTS)版本,我们可能需要支持这些平台几年.
其他配置可以奏效,但Fluid框架不支持. 如果一个不支持的配置停止工作, 我们不会将此归类为错误 . 要请求支持未列出的配置, 请存档 . 产品组会评估你的要求. 在此问题上,请具体说明配置的现状:
- 配置有效但需要官方支持.
- 配置不起作用,需要更改.
支持的运行时间
- Fluid框架支持节点.js版本22和24同时收到 上游支助。 。 。 .
- 流体框架将停止支持第22版 当上游支持于2027-04-30结束时。 。 。 .
- 流体框架不支持节点.js与
--no-experimental-fetch旗帜.
- Fluid框架支持支持ES2022标准库的现代浏览器.
支持的工具
- 类型脚本 6.0数字 :
- 流体框架支持全部
strict选项. - 设定建设目标(
lib, (中文(简体) ),target改为:ES2022或后会. - 启用
strictNullChecks。 。 。 . - 流体框架不支持 在 TypeScript 6.0 中贬值的配置选项。 。 。 .
- 流体框架不完全支持
exactOptionalPropertyTypes。 。 。 . 如果您启用此选项, 请不要使用in, (中文(简体) ),Reflect.has, (中文(简体) ),Object.hasOwn,或Object.prototype.hasOwnProperty改为Fluid框架类型的窄成员. 这些方法可以错误地排除undefined从可能的值.
- 流体框架支持全部
- 网络软件包 页:1
- 我们不需要一个特定的捆绑者. 其他处理ES模块的捆绑机可以工作,但我们只积极测试网页包.
模块分辨率
在类型脚本中 compilerOptions,使用时 Node16, (中文(简体) ), Node20, (中文(简体) ), NodeNext,或 Bundler 模块分辨率.
这些设置遵循 节点.js v12+无害环境管理 分辨率和加载算法。 。 。 .
不使用 Node10 模块分辨率.
模块格式
- ES模块: 使用ES模块来消耗Fluid框架客户端软件包,包括在Node.js中.
- 常见JS : Fluid Framework在3.0版本或后期不正式支持CommonJS.
贡献准则
你们可以 贡献 通过这些方式实现流体框架:
详细指示改为: repo 文档。 。 。 .
本项目遵循 Microsoft 开源行为守则。 。 。 . 更多信息,改为: 《行为守则》经常被问到的问题。 。 。 . 问题或评论,联系 打开码@ microsoft.com。 。 。 .
这个项目可能包含微软项目的商标或标志,产品,或服务. 这些商标或标志的使用必须遵循微软 商标和品牌准则。 。 。 . 在这个项目的修改后版本中使用微软商标或标志不得造成混淆或暗示微软赞助.
帮助
读取 流体框架文件 用于了解流体框架概念和API.
要求提供文件未载列的资料, 创建问题。 。 。 .
商标
这个项目可能包含微软项目的商标或标志,产品,或服务.
这些商标或标志的使用必须遵循微软的 商标和品牌准则。 。 。 .
在这个项目的修改后版本中使用微软商标或标志不得造成混淆或暗示微软赞助.