分散データ構造

Fluid Framework により、開発者は、接続されている各クライアントが同じ状態にアクセスできるようにする分散データ構造 (DDS) を使用することができます。 DDS で提供されている API は、一般的なデータ構造を扱ったことがあるプログラマーにとって馴染みやすいように設計されています。

Note

この記事は、fluidframework.com の分散型データ構造の概要に記載されている内容を理解していることを前提としています。

分散データ構造は、ローカルのデータ構造と同じように動作します。 コードを使用してデータを追加したり、データを削除したり、更新したりすることができますが、DDS はローカル オブジェクトではありません。 DDS は、その DDS の同じ親コンテナーを公開している他のクライアントによっても変更することができます。 複数のユーザーが同じ DDS を同時に変更することが可能なため、データのモデリングにどの DDS を使用するかを検討する必要があります。

Note

"同時" の意味

2 つ以上のクライアントが、他のクライアントが行った変更をサーバーから受け取る前に、それぞれ変更を行った場合、これは、"同時" に変更が加えられたことになります。

シナリオに適したデータ構造を選択することで、アプリケーションのパフォーマンスやコード構造を改善することができます。

各 DDS は、次の 3 つの特性がそれぞれ異なります。

  • 基本的なデータ構造: たとえば、キーと値のペア、シーケンス、キューなどです。
  • クライアントの独立性: "オプティミスティック" な DDS では、どのクライアントも一方的に値を変更することができ、その新しい値は他のすべてのクライアントに伝搬されます。 しかし、"コンセンサス" DDS では、コンセンサス プロセスによって他のクライアントに受け入れられた場合にのみ、変更が許可されます。
  • 統合ポリシー: クライアントからの変更が競合している場合にどのように解決するかを決定するポリシー。

以下に、データ構造と、最も有用なタイミングについて列挙しています。

キーと値のデータ

これらの DDS は、キーと値のデータを格納するために使用されます。 これらはオプティミスティックで、last-writer-wins (最終書込者優先) による統合ポリシーを使用しています。 ペアの値には複合オブジェクトを指定することができますが、任意のペアの値を直接編集することはできません。必要な編集が加えられた新しい値で、値全体を置き換える必要があります。

  • SharedMap: 基本的なキーと値のデータ構造。

キーと値のシナリオ

キーと値のデータ構造は、多くのシナリオで最も一般的な選択肢です。

  • ユーザー設定データ。
  • 調査の現在の状態。
  • ビューの構成。

キーと値 DDS に関する一般的な問題とベストプラクティス

  • SharedMap にカウンターを格納すると、予期しない動作が発生します。 代わりに、SharedCounter を使用してください。
  • 複数のユーザーが 1 つのエントリの一部を共同で変更することはできないため、配列、リスト、またはログをキーと値のエントリに格納すると、予期しない動作が発生する場合があります。 配列やリスト データは、SharedSequence または Shareddink に格納してみてください。
  • 1 つのキーと値のエントリに大量のデータを格納すると、パフォーマンスや統合の問題が発生する可能性があります。 更新を行うごとに、2 つの更新が統合されるわけではなく、値全体が更新されます。 複数のキー間でデータを分割してみてください。

シーケンス

これらの DDS は、シーケンシャル データを格納するために使用されます。 これらはオプティミスティックです。 シーケンス データ構造は、リストや配列の指定したインデックスにデータを追加したり削除したりする場合に便利です。 キーと値のデータ構造とは異なり、シーケンスには順序性があり、複数のユーザーによる同時挿入にも対応できます。

  • SharedNumberSequence: 数値のシーケンス。
  • SharedNumberSequence: プレーン オブジェクトのシーケンス。

シーケンスのシナリオ

  • リスト
  • タイムライン

シーケンス DDS に関する一般的な問題とベストプラクティス

  • シーケンスの項目には、不変なデータのみを追加するようにします。 項目の値を変更する唯一の方法は、まずその項目をシーケンスから削除してから、古い値があった位置に新しい値を挿入することです。 ただし、他のクライアントも挿入や削除を行うことができるため、新しい値を希望の位置に入れる確実な方法はありません。

文字列

SharedString DDS は、共同編集可能な非構造化テキストデータに使用されます。 これはオプティミスティックです。

  • SharedString -- 共同編集可能なテキストを処理するためのデータ構造。

文字列のシナリオ

  • テキスト エディター

関連項目

DDS とその使用方法の詳細については、fluidframework.com の次のセクションを参照してください。