Skytools 特定消费者
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 编码的记录,并根据配置文件将它们写入分区表中。用于对数据进行分区。例如,只需要在线保留很短时间的更改日志可以写入每天的表,然后在它们变得不相关时删除。还可以选择哪些列必须写入目标数据库。根据需要创建根据配置文件创建目标表。