你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

分布式数据结构

Fluid Framework 为开发人员提供了分布式数据结构(DDSes),可自动确保每个连接的客户端都有权访问相同的状态。 DDSes 提供的 API 旨在让之前使用过常见数据结构的程序员感到熟悉。

注释

本文假定你熟悉 fluidframework.com 上的 分布式数据结构简介

分布式数据结构的行为类似于本地数据结构。 代码可以向其添加数据、删除数据、更新数据等。但是,DDS 不是本地对象。 某个 DDS 也可以由公开该 DDS 的同一父容器的其他客户端更改。 由于用户可以同时更改相同的 DDS,因此您需要慎重选择用于数据建模的 DDS。

注释

“同时”的含义

据说,如果两个或更多个客户端在收到其他人从服务器进行的更改之前进行更改,则它们 会同时 进行更改。

为方案选择正确的数据结构可以提高应用程序的性能和代码结构。

DDS 之间的差别体现在三个特征上:

  • 基本数据结构:例如键值对、序列或队列。
  • 客户端自治乐观 DDS 允许任何客户端单方面更改值,并将新值中继到所有其他客户端。 但 共识 DDS 仅在通过共识过程获得其他客户端的认可后才允许进行更改。
  • 合并策略:确定如何解决来自客户端的冲突更改的策略。

下面我们枚举了数据结构,并描述了它们可能最有用的时间。

键值数据

这些 DDS 用于存储键值数据。 它们属于乐观 DDS,使用“最后写入者胜出”合并策略。 虽然一个对的值可以是复杂对象,但任何给定对的值都不可直接编辑;必须将整个值替换为包含所需编辑内容的新值,并且需要整体替换。

  • SharedMap:基本键值数据结构。

键值方案

键值数据结构是许多方案最常见的选择。

  • 用户首选项数据。
  • 调查的当前状态。
  • 视图的配置。

键值 DDS 的常见问题和最佳做法

  • 在 SharedMap 中存放计数器会导致意外行为。 请改用 SharedCounter。
  • 将数组、列表或日志存储在键值条目中可能会导致意外行为,因为用户无法协作修改一个条目的各个部分。 尝试将数组或列表数据存储在 SharedSequence 或 SharedInk 中。
  • 将大量数据存储在一个键值条目中可能会导致性能或合并问题。 每个更新将更新整个值,而不是合并两个更新。 请尝试将数据拆分到多个键。

序列

这些 DDS 用于存储顺序数据。 他们很乐观。 当需要在列表或数组中的指定索引处添加或删除数据时,序列数据结构非常有用。 与键值数据结构不同,序列具有顺序,并且可以处理来自多个用户的同时插入。

  • SharedNumberSequence:数字序列。
  • SharedObjectSequence:一系列纯对象。

序列方案

  • 列表
  • 时间线

序列 DDS 的常见问题和最佳做法

  • 仅将不可变数据存储为序列中的项。 更改项值的唯一方法是先将其从序列中删除,然后在旧值所在的位置插入新值。 但是,由于其他客户端可以插入和删除,因此无法将新值放入所需位置。

字符串

SharedString DDS 用于可协作编辑的非结构化文本数据。 这是乐观的。

  • SharedString -- 用于处理协作文本的数据结构。

字符串方案

  • 文本编辑器

另请参阅

若要详细了解 DDSes 及其用法,请参阅 fluidframework.com 的以下部分: