Neo4j Aura 上的 CDC

Neo4j 从事务日志中提取 CDC 信息。但是,默认情况下,事务日志不包含 CDC 直接可用的信息。为了使 CDC 正常工作,需要通过进一步的信息来丰富事务日志。这作为每个数据库的额外配置选项应用。一旦启用 CDC,数据库就可以准备好响应来自 客户端应用程序 的 CDC 查询。

CDC 有三种工作模式

  • OFF — CDC 已禁用(默认值)。

  • DIFF — 更改被捕获为每个更改实体的之前和之后状态之间的差异(即,它们只包含删除、更新和添加)。

  • FULL — 更改被记录为每个更改实体的之前和之后状态的完整副本(即,它们包含完整的节点/关系,无论它们在多大程度上被更改)。

启用/切换 CDC 模式

管理员用户可以通过设置“编辑 CDC 模式”来调整数据库的 CDC 模式,该设置可以通过 Aura 实例选项访问。非管理员用户可以查看当前的 CDC 模式,但不能对其进行编辑。

将 CDC 模式从 DIFF 修改为 FULL 或反之,会立即更改 捕获的更改的结构。您的 CDC 应用程序必须能够处理格式更改。

禁用 CDC

管理员用户可以通过设置“编辑 CDC 模式”来禁用数据库的 CDC,该设置可以通过 Aura 实例选项访问。将模式设置为 OFF。只有管理员用户可以禁用数据库的 CDC 模式。

禁用 CDC 会立即破坏更改事件的连续性。在禁用之前生成的更改标识符将不再可用,即使重新启用 CDC,之前生成的更改标识符仍然无效。禁用然后重新启用 CDC 等同于首次启用它:没有之前更改的记忆。

CDC 会自动为以下情况禁用

  • 新实例

  • 克隆的实例

  • 暂停的实例

  • 从快照还原的实例

关键考虑因素

暂停/恢复数据库

不建议暂停将 CDC 模式设置为 DIFFFULL 的数据库,因为当数据库恢复时,CDC 模式将设置为 OFF

当实例恢复时,它的行为类似于 还原快照

安全性

CDC 返回数据库中的所有更改,而不限于特定用户有权访问的实体。为了防止未经授权的访问,过程 db.cdc.query 需要管理员权限,并且应配置为最小权限访问。

要让普通用户能够运行 db.cdc.query,用户必须被授予执行权限以及提升的执行权限。

GRANT EXECUTE PROCEDURE db.cdc.query ON DBMS TO $role;
GRANT EXECUTE BOOSTED PROCEDURE db.cdc.query ON DBMS TO $role;

非提升的执行权限通常是 PUBLIC 角色的一部分,在这种情况下,它们不需要再次授予。

此外,除非用户被授予访问权限,否则他们无法访问数据库。

GRANT ACCESS ON DATABASE $database TO $role

通常,PUBLIC 角色已经拥有对默认数据库的访问权限。

过程 db.cdc.currentdb.cdc.earliest 不需要管理员权限。为了执行这些操作,访问数据库和常规执行权限就足够了。

有关 Neo4j 中过程权限的更多详细信息,请参阅 操作手册 → 管理过程和用户定义函数权限

事务日志保留

由于 CDC 信息存储在事务日志条目中,因此保留日志的时间决定了应用程序可以查询 CDC 数据的回溯时间。

为事务日志保留的磁盘空间量是固定的,日志会定期轮换和修剪,以确保其大小不会超过阈值。当日志被修剪时,您的 CDC 应用程序将无法访问已删除文件中的事务。通常这不是问题,因为应用程序旨在以(准)实时的方式使用更改。但是,如果您的 CDC 应用程序在很长时间内不可用,那么当它再次可用时,一些最旧的未消耗的更改可能已经被修剪了。

虽然 检索最早的更改事件 可能有助于您了解数据库的事务日志保留了多长时间,但您应该谨慎地根据此信息做出假设:旧事务从日志中修剪的速率取决于传入事务的数量和大小,因此可能会随着时间的推移而波动。