Neo4j Aura 上的 CDC
Neo4j 从事务日志中提取 CDC 信息。但是,默认情况下,事务日志不包含 CDC 直接可用的信息。为了使 CDC 正常工作,需要通过进一步的信息来丰富事务日志。这作为每个数据库的额外配置选项应用。一旦启用 CDC,数据库就可以准备好响应来自 客户端应用程序 的 CDC 查询。
CDC 有三种工作模式
-
OFF
— CDC 已禁用(默认值)。 -
DIFF
— 更改被捕获为每个更改实体的之前和之后状态之间的差异(即,它们只包含删除、更新和添加)。 -
FULL
— 更改被记录为每个更改实体的之前和之后状态的完整副本(即,它们包含完整的节点/关系,无论它们在多大程度上被更改)。
启用/切换 CDC 模式
管理员用户可以通过设置“编辑 CDC 模式”来调整数据库的 CDC 模式,该设置可以通过 Aura 实例选项访问。非管理员用户可以查看当前的 CDC 模式,但不能对其进行编辑。
将 CDC 模式从 |
禁用 CDC
管理员用户可以通过设置“编辑 CDC 模式”来禁用数据库的 CDC,该设置可以通过 Aura 实例选项访问。将模式设置为 OFF
。只有管理员用户可以禁用数据库的 CDC 模式。
禁用 CDC 会立即破坏更改事件的连续性。在禁用之前生成的更改标识符将不再可用,即使重新启用 CDC,之前生成的更改标识符仍然无效。禁用然后重新启用 CDC 等同于首次启用它:没有之前更改的记忆。 |
CDC 会自动为以下情况禁用
-
新实例
-
克隆的实例
-
暂停的实例
-
从快照还原的实例
关键考虑因素
安全性
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;
非提升的执行权限通常是 |
此外,除非用户被授予访问权限,否则他们无法访问数据库。
GRANT ACCESS ON DATABASE $database TO $role
通常, |
过程 db.cdc.current
和 db.cdc.earliest
不需要管理员权限。为了执行这些操作,访问数据库和常规执行权限就足够了。
有关 Neo4j 中过程权限的更多详细信息,请参阅 操作手册 → 管理过程和用户定义函数权限。
事务日志保留
由于 CDC 信息存储在事务日志条目中,因此保留日志的时间决定了应用程序可以查询 CDC 数据的回溯时间。
为事务日志保留的磁盘空间量是固定的,日志会定期轮换和修剪,以确保其大小不会超过阈值。当日志被修剪时,您的 CDC 应用程序将无法访问已删除文件中的事务。通常这不是问题,因为应用程序旨在以(准)实时的方式使用更改。但是,如果您的 CDC 应用程序在很长时间内不可用,那么当它再次可用时,一些最旧的未消耗的更改可能已经被修剪了。
虽然 检索最早的更改事件 可能有助于您了解数据库的事务日志保留了多长时间,但您应该谨慎地根据此信息做出假设:旧事务从日志中修剪的速率取决于传入事务的数量和大小,因此可能会随着时间的推移而波动。