2017-06-01 80 views
1

如果我叫realm.create(),并通过在一个已经存在的条目的主键,我的理解是,它的更新,而不是插入。如何通过不变的数据影响领域同步?

如果我正在使用领域服务器,并且一个客户端在现有条目上调用realm.create()并使用与该行中已经完全相同的数据更新所有字段,其他客户端是否会看到需要同步该行,还是因为没有任何数据会改变,他们会知道忽略它?

是通过对一些元数据版本比较以前和当前的数据,或者通过在行生成同步所需的标志基于时如果数据改变项最后一次编辑regaurdless?

我问,因为我有一个情况,即一个客户端可能会调用realm.create()成千上万的现有行,即使没有数据会改变,我不希望我的其他客户端必须执行巨大的同步结果是。

回答

2

领域的同步是基于离实际的数据库操作,而不是国家。更具体地说,数据库维护事务或操作日志,并且数据同步基于传输该数据。例如,如果您执行realm.create('Object', {foo:bar, id: 0}, true)这对Objectid:0的UPSERT操作,这将是写入日志和同步。

其结果是,即使UPSERT不改变任何数据,操作仍必须同步。其原因是,同步使用操作转换算法自动确保跨设备的所有更改最终保持一致。这通过确保服务器最终接收每个操作来起作用。

因此,如果可能的话,您应该注意不必要的操作。请注意,同步是高度优化的,仅通过同步操作,与每次更改时重新发送整个对象相比,数据传输都会减少。

从长期来看,我们将增加在服务器上的日志压实支持。这意味着客户端仍然需要将他们的操作传输到服务器,但服务器可以减少融合其他客户端所需的操作(例如,将多个集合操作折叠到最终集合)。