10.2 何时使用全局序列
使用分布式的序列允许您避免插入冲突的问题。如果您定义一个主键或唯一列默认 nextval(...) 表达式,该表达式 BDR 组中的所有节点之间共享的全局序列是指它是不可能去过的任何其他节点的值相同的任何节点。BDR 当同步时插入节点之间,他们可以永远不会发生冲突。
有是没有必要使用分布式的序列,如果︰
您将确保全局唯一性如使用另一种方法︰
- 本地序列与偏移量和增量;
- UUIDs;
- 外部协调的自然键
您使用的数据在临时表(TEMPORARY)或 UNLOGGED 表中,因为这些都永远不会是当前节点外可见。
全局序列并不适合需要增量 1 以外的应用程序。请参见全局序列的限制。
因此,如果所有的三个不同节点同时调用 nextval 他们可能得到值 50、 150 和 250 块的序列值是开始发放。因此,在时间不 ' nextval 在一个节点上的可能会返回值高于 nextval 调用在时间 t + 1' 在另一个节点上。在单个节点内 nextval 的常用规则仍然适用。这意味着,需要生成的 Id,以严格随时间而增加的应用程序将无法正确处理全局序列-然而,这样的应用程序也会存在问题与所有其他方法在分布式系统中 (见第 10.7) 生成密钥。
全局序列并不适合 2 节点 BDR 系统,因为仲裁多数都需要分配新的序列块。此外,全局序列不工作时只有一个节点配置。
因为大块分配需要投票节点之间,全局的序列不适合,节点可能相互隔离,要长于该应用程序使用一个序列块,因为查询试图分配一个新值,将错误,如果没有任何可用的部署。