Skytools 特定消费者

来自 PostgreSQL wiki
跳转到导航跳转到搜索

PGQ 是 londiste 复制解决方案的基础,可用于轻松编写更具体的消费者。以下是您将在 Skytools 包中找到的内容的描述。

bulk_loader

bulk_loader 是 PgQ 消费者,它从源队列读取 URL 编码的记录,并根据配置文件将它们写入表中。它针对的是无法处理将每行作为单独语句应用的慢速数据库。最初是为 BizgresMPP/greenplumDB 编写的,它们具有非常高的每个语句开销,但也可用于加载无法管理常规复制的常规 PostgreSQL 数据库。

行为属性

  • 读取 URL 编码的“logutriga”记录。
  • 不进行分区,但可以选择重定向表事件。
  • 不保持事件顺序。
  • 始终使用 COPY 加载数据,无论是直接加载到主表(INSERT)还是加载到临时表(UPDATE/COPY),然后从那里应用。

事件通常由 pgq.logutriga() 生成。Logutriga 将记录的所有数据添加到事件中(即使在更新和删除的情况下也是如此)。

cube_dispatcher

cube_dispatcher 是 PgQ 消费者,它从源队列读取 URL 编码的记录,并根据配置文件将它们写入分区表中。用于准备商业智能数据。表名称从事件中的生产者字段读取。批次创建时间用于分区。同一天创建的所有记录都将进入同一个表分区。如果分区不存在,cube_dispatcher 将根据模板创建它。

事件通常由 pgq.logutriga() 生成。Logutriga 将记录的所有数据添加到事件中(即使在更新和删除的情况下也是如此)。

cube_dispatcher 可用于两种模式

keep_all
保留所有传入的数据。如果一条记录在同一天被更新多次,则该天的表分区将包含该记录的多个实例。
keep_latest
仅保留每条记录的最后一个实例,用于每一天。这也意味着所有表都必须具有主键,以便 cube_dispatcher 可以在插入新数据之前删除记录的先前版本。

queue_mover

queue_mover 是 PgQ 消费者,它将事件从源队列传输到目标队列。一个用例是在多个数据库中生成事件时,使用 queue_mover 将这些事件合并到单个队列中,然后可以由需要处理这些事件的消费者进行处理。例如,在分区数据库的情况下,将每个分区中的事件移到一个中心队列数据库中,然后在那里处理它们会很方便。这样,分区数据库的配置和依赖项会更简单、更健壮。另一个用例是从 OLTP 数据库移动事件到批处理服务器。

事务性:事件将在目标端作为一项事务插入。这意味着只需要在目标端跟踪 batch_id。

queue_spliter

queue_splitter 是 PgQ 消费者,它将事件从源队列传输到多个目标队列。每个事件中的 ev_extra1 字段显示它必须进入哪个目标队列。(pgq.logutriga() 将表名放在那里。)

一个用例是从 OLTP 数据库移动事件到批处理服务器。通过使用队列分离器,可以将所有类型的事件移到一个消费者用于批处理,从而使 OLTP 数据库不那么拥挤。

table_dispatcher

table_dispatcher 是 PgQ 消费者,它从源队列读取 URL 编码的记录,并根据配置文件将它们写入分区表中。用于对数据进行分区。例如,只需要在线保留很短时间的更改日志可以写入每天的表,然后在它们变得不相关时删除。还可以选择哪些列必须写入目标数据库。根据需要创建根据配置文件创建目标表。