计算机系统应用教程网站

网站首页 > 技术文章 正文

图数据库JanusGraph事务日志 图数据库janusgraph实战 pdf

btikc 2024-10-26 08:40:23 技术文章 12 ℃ 0 评论

JanusGraph可以自动记录事务性更改以进行其他处理或作为更改记录。要为特定事务启用日志记录,请在事务开始时指定目标日志的名称。

提交后,事务期间所做的任何更改都会记录到用户日志系统中名为addedPerson的日志中。用户日志记录系统是一个可配置的日志后端,具有与JanusGraph兼容的日志接口。默认情况下,日志将写入主存储后端中的一个单独的存储区,该存储区可以按如下所述进行配置。在事务开始时指定的日志标识符标识记录更改的日志,从而允许将不同类型的更改记录在单独的日志中,以便进行单独的处理。

JanusGraph提供了一个用户事务日志处理器框架来处理记录的事务更改。通过JanusGraphFactory.openTransactionLog(JanusGraph)对事务日志处理器进行打开。然后可以为保存事务性更改的日志添加处理器。


在本例中,为名为addedPerson的用户事务日志构建日志处理器,以处理使用addedPerson日志标识符的事务中所做的更改。此日志处理器中添加了两个更改处理器。第一个处理器计算添加的人类数量,第二个处理器计算添加到图形中的神的数量。

当一个日志处理器是针对特定的日志构建的,比如上面例子中的addedPerson日志,它将在成功构建和初始化后立即从日志中读取事务性更改记录,从日志的头开始。生成器将在日志中标记处理器开始读取记录的时间点。或者,可以在构建器中为日志处理器指定标识符。日志处理器将使用标识符定期保持其处理状态,即,它将在最后读取的日志记录上维护一个标记。如果稍后使用相同的标识符重新启动日志处理器,它将继续从上次读取的记录中读取数据。当日志处理器需要长时间运行,因此可能会失败时,这一点特别有用。在这种故障情况下,可以使用相同的标识符重新启动日志处理器。必须确保日志处理器标识符在JanusGraph集群中是唯一的,以避免持久读取标记上的冲突。

变更处理器必须实现ChangeProcessor接口。对于从日志中读取的每个更改记录,将调用它的process()方法,该更改记录具有JanusGraphTransaction句柄、导致更改的事务的id和保存事务更改的ChangeState容器。可以查询变更状态容器以检索变更状态的各个元素。在本例中,将检索所有添加的顶点。有关ChangeState的所有查询方法的说明,请参阅API文档。提供的事务id可用于调查事务的起源,事务的id是由执行事务的JanusGraph实例的id(txId.getInstanceId())和实例中的事务id(txId.getTransactionId())组合成的唯一标示。此外,事务的执行时间可通过txId.getTransactionTime()获得。

变更处理器是在多个线程中单独执行的。如果变更处理器访问全局状态,则必须确保该状态允许并发访问。虽然日志处理器按顺序读取日志记录,但更改是在多个线程中处理的,因此无法保证日志顺序在更改处理器中保持不变。

注意,日志处理器对日志中的每个记录至少运行一次每个注册的变更处理程序,这意味着在某些故障情况下,单个事务性更改记录可能会被多次处理。不能在正在运行的日志处理器中添加或删除更改处理器。换句话说,日志处理器在构建之后是不可变的。要更改日志处理,请启动新的日志处理器并关闭现有的日志处理器。

上面的日志处理器用一个更改处理器处理日志标识符为“battle”的事务,该处理器评估添加到Hercules的战斗边缘。这个例子演示了传递给变更处理器的事务句柄是一个普通的JanusGraphTransaction,它查询JanusGraph图并对其进行更改。

事务日志用例

更改记录

用户事务日志可用于记录对图形所做的所有更改。通过使用单独的日志标识符,可以在不同的日志中记录更改,以区分不同的事务类型。

在任何时候,都可以构建一个日志处理器,它可以从所需的开始时间开始处理所有记录的更改。这可以用于取证分析,根据不同的图形重放更改,或计算聚合。

下游更新

JanusGraph图形集群通常是大型体系结构的一部分。用户事务日志和日志处理器框架提供了将更改广播到整个系统的其他组件所需的工具,而不会减慢导致更改的原始事务的速度。当事务延迟需要较低和/或有许多其他系统需要对图中的更改发出警报时,这尤其有用。

触发器

用户事务日志提供了实现触发器的基本基础结构,触发器可以扩展到大量并发事务和非常大的图形。触发器注册到特定的数据更改中,它既可以触发外部系统中的事件,也可以触发图形的其他更改。在规模上,不建议在原始事务中实现触发器,而是通过日志处理器框架稍微延迟处理触发器。第二个示例显示了如何评估对图形的更改并触发其他修改。

日志配置

有许多配置选项可以微调日志处理器从日志中读取的方式。有关log命名空间下的选项,请参阅完整的配置选项列表配置参考。要配置用户事务日志,请使用log.user命名空间。此处列出的选项允许配置要使用的线程数、每个批中读取的日志记录数、读取间隔以及事务更改记录是否应在可配置的时间量(TTL)后自动过期并从日志中删除。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表