1.2 逻辑复制(行级别)和物理(块级别)之间的差异
BDR使用PostgreSQL 的逻辑解码功能来实现一个低开销逻辑复制解决方案。 与PostgreSQL旧的物理流(基于数据块)或基于归档文件的辅助,它有显著的优势-和一些缺点-时相比
逻辑的复制具有一组不同的权衡取舍到物理基于块的复制。它不是清楚地更好或更糟。物理复制简单得多、 有较少的大交易的滞后,支持旧版本和可能需要更少的磁盘 I/O,但一般会消耗更多的网络带宽、 不能复制的数据库或表,子集和不能支持多主或跨版本跨拱复制。您应该使用哪种解决方案取决于你需要做什么。
由 BDR 物理复制和逻辑复制的主要区别是︰
多主复制是可能的。所有成员都可以写入复制更改的节点。
从索引的数据写入,VACUUM,提示位等不会通过网络发送,因此可能降低带宽需求-尤其是与物理复制与 full_page_writes 相比。
那里是没有需要使用 hot_standby_feedback 或取消长时间运行的查询,在热备用设备,所以没有任何"取消声明将于与恢复之间的冲突"的错误。
可能在副本上使用临时表。
从其他地方都不会被复制的表可能写入 BDR。
支持复制跨主要版本 (例如9.4到9.5)。
支持跨体系结构和操作系统 (如 ppc64 这类 Linux 的 x86_64 OS X) 的复制。
复制是单个数据库(或细粒度),而物理复制可以和必须复制的所有数据库。
BDR 的逻辑复制执行限制一些支持 DDL (参见: DDL 复制),不适用于物理复制
影响像改变系统或创建角色的所有数据库的命令不会复制由 BDR,必须由管理员管理。
磁盘随机 I/O 要求和刷新频率可能高于物理复制。
只有已完成的事务复制。 大事务可能有较长的复制延迟,因为在事务完成之前不会开始复制。 中止的事务写入永远不会在所有复制。
逻辑的复制 PostgreSQL 版本需要大于等于9.4。
逻辑复制不能用于时间点恢复 (尽管它可以支持复制延迟),
逻辑复制只能通过流媒体,不是WAL文件归档,并且要求复制槽的使用。
级联复制(还没有)支持通过逻辑复制。
大多数用户会想要使用物理复制和/或WAL存档为冗余、 高可用性、 备份和 PITR。逻辑的复制非常适合于数据集成、 数据移动和数据聚合 (经常作为替代或结合 ETL)、 扩展和多主机分布式部署。
大多数用户会想要使用物理复制和/或WAL存档为冗余、 高可用性、 备份和 PITR。逻辑的复制非常适合于数据集成、 数据移动和数据聚合 (经常作为替代或结合 ETL)、 扩展和多主机分布式部署。
它是可能不同的 PostgreSQL 版本、 操作系统和/或处理器体系结构使用逻辑复制,因为它可以回退到发送数据以文本形式-就像 SQL 之间复制。服务器所在的兼容它可以使用更快过程的二进制表示形式或一种中间形式。逻辑复制虽然不能防止所有可能不兼容的问题 — — 例如,它不是可能复制添加在 PostgreSQL postgresql 9.4 9.5 因为 9.4 有没有方法来存储和表示它的类型。
与物理复制不同,复制上PostgreSQL安装的所有数据库,逻辑解码许可证(和要求)单独的复制的每个数据库。 它还可以复制在数据库内的表的子集。它是不可能在逻辑复制的服务器上配置的所有数据库通配符复制。 您可以复制多个数据库副本,但必须为每个数据库单独配置。
临时表总是可以在所有节点上创建,即使他们也接收复制数据。 没有禁止这样做,像它存在 PostgreSQL 的块级别复制功能。
本地写入并不局限于临时表。可能从上游/对等节点接收更改的节点上甚至创建未记录的表。 此外,复制集允许更改表要复制的话,所以可能从复制中排除一些正常的表的一个子集。 这使得 BDR 地方重大工作是从别处也接收复制的数据的节点上的用例非常有用。
逻辑的复制不能启动复制的事务,直到它犯。 这会导致更长的时间复制延迟大交易比物理复制, 尽快它们写在哪里复制事务的更改。 它还允许逻辑复制由中止的事务完全跳过复制的写入。未来的功能增强逻辑解码可能允许流的交易之前他们承诺。
因为在流复制模式(而不是WAL存档)只支持逻辑复制,它不适合做时间点恢复。 可能在流物理复制和/或 PITR,结合中使用逻辑复制不,有的是需要选择一个或其他。