Fluid Framework 為開發人員提供分散式數據結構(DDSes),可自動確保每個連線的用戶端都能存取相同的狀態。 DDSes 所提供的 API 是設計使其對曾經使用過常用資料結構的程式設計師感到熟悉。
備註
本文假設您已熟悉在 fluidframework.com 上 介紹分散式數據結構 。
分散式數據結構的行為就像本機數據結構。 您的程式代碼可以新增數據、移除數據、更新數據等等。不過,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 小節: