10.1 全局序列的目的

许多应用程序需要在数据库中分配一个唯一的条目。一些应用程序使用由外部程序生成的GUID值,一些使用数据库提供的值。因为唯一性侵犯是"发散性错误",不是很容易解析,这是重要的(就像那在 BDR中实现的那样)乐观冲突决议计划。

SQL 标准要求生成唯一值的序列对象。 然后,这些可以用于提供默认值使用默认 nextval('mysequence') 与 PostgreSQL 的串行伪类型一样。 PostgreSQL 不提供任何设施来同步或复制序列,所以他们是纯粹的节点本地。

分片节点或多节点的应用程序的典型方法是使用分腿垫步或分区序列, 在那里所有节点的相同的固定值都递增的序列,每个节点有一个固定的偏移量内序列。 所以节点 1 生成 Id 1、 101、 201、 301,......;节点 2 生成 Id 2,102、 202、 302,......;等。 这容易做到的 PostgreSQL 的现有序列,但成为一个主要的问题, 如果你不允许足够的增长-在以上所述,空间如果有 101 节点你陷入严重的麻烦。 这也是尴尬,需要特定于节点的 DDL 和安装程序。请参阅第 10.7。

为了帮助避免对并发插入 BDR 的多主机冲突提供了全局的序列。 全局序列看起来就像一个正常的 PostgreSQL 序列的应用程序和值都从它使用 nextval 像正常分配。 不像一个正常的 PostgreSQL 序列,不以任何方式的节点之间同步, 保证全局序列生成唯一值跨 bdr 节点组的所有成员。

results matching ""

    No results matching ""