2017-06-01 79 views
1

如果我叫realm.create(),並通過在一個已經存在的條目的主鍵,我的理解是,它的更新,而不是插入。如何通過不變的數據影響領域同步?

如果我正在使用領域服務器,並且一個客戶端在現有條目上調用realm.create()並使用與該行中已經完全相同的數據更新所有字段,其他客戶端是否會看到需要同步該行,還是因爲沒有任何數據會改變,他們會知道忽略它?

是通過對一些元數據版本比較以前和當前的數據,或者通過在行生成同步所需的標誌基於時如果數據改變項最後一次編輯regaurdless?

我問,因爲我有一個情況,即一個客戶端可能會調用realm.create()成千上萬的現有行,即使沒有數據會改變,我不希望我的其他客戶端必須執行巨大的同步結果是。

回答

2

領域的同步是基於離實際的數據庫操作,而不是國家。更具體地說,數據庫維護事務或操作日誌,並且數據同步基於傳輸該數據。例如,如果您執行realm.create('Object', {foo:bar, id: 0}, true)這對Objectid:0的UPSERT操作,這將是寫入日誌和同步。

其結果是,即使UPSERT不改變任何數據,操作仍必須同步。其原因是,同步使用操作轉換算法自動確保跨設備的所有更改最終保持一致。這通過確保服務器最終接收每個操作來起作用。

因此,如果可能的話,您應該注意不必要的操作。請注意,同步是高度優化的,僅通過同步操作,與每次更改時重新發送整個對象相比,數據傳輸都會減少。

從長期來看,我們將增加在服務器上的日誌壓實支持。這意味着客戶端仍然需要將他們的操作傳輸到服務器,但服務器可以減少融合其他客戶端所需的操作(例如,將多個集合操作摺疊到最終集合)。