JanusGraph---Transaction Log

事务日志

记录事务日志

tx = graph.buildTransaction().logIdentifier('addedPerson').start()
u = tx.addVertex(label, 'human')
u.property('name', 'proteros')
u.property('age', 36)
tx.commit()
  • 添加事务日志,使用addedPerson标识。
  • 事务中改变都会被记录到用户日志系统并以id区别。
  • 日志保存在存储后端中。

处理日志log processor framework

  • 使用日志处理器对特定的事务日志(指定要处理的事务日志的id标识)进行处理
  • 为addedPerson事务日志配置日志处理器进行处理
import java.util.concurrent.atomic.*;
import org.janusgraph.core.log.*;
import java.util.concurrent.*;
//打开日志处理器
logProcessor = JanusGraphFactory.openTransactionLog(g);
totalHumansAdded = new AtomicInteger(0);
totalGodsAdded = new AtomicInteger(0);
//指定要处理的事务日志名称
logProcessor.addLogProcessor("addedPerson").
//事务处理器名称
        setProcessorIdentifier("addedPersonCounter").
//事务处理器读取日志的位置(通过时间指定)
        setStartTime(System.currentTimeMillis(), TimeUnit.MILLISECONDS).
//添加ChangeProcessor处理器1进行处理
        addProcessor(new ChangeProcessor() {
            @Override
            public void process(JanusGraphTransaction tx, TransactionId txId, ChangeState changeState) {
                for (v in changeState.getVertices(Change.ADDED)) {
                    if (v.label().equals("human")) totalHumansAdded.incrementAndGet();
                }
            }
        }).
//添加ChangeProcessor处理器2处理:多个处理器并发执行
        addProcessor(new ChangeProcessor() {
            @Override
            public void process(JanusGraphTransaction tx, TransactionId txId, ChangeState changeState) {
                for (v in changeState.getVertices(Change.ADDED)) {
                    if (v.label().equals("god")) totalGodsAdded.incrementAndGet();
                }
            }
        }).
        build();
  • addedPersonCounter日志处理器顺序读取addedPerson事务日志记录的日志,但是注册的两个ChangeProcessor处理器会并发执行读取到的每一条日志。
  • 日志处理的的标识addedPersonCounter有重要作用:定期维护日志处理器的状态。即其会在最后一个日志记录上打上一个标记,如果日志处理器在执行很长时候挂掉了,当其重新开始并使用相同的名称addedPersonCounter,那么其就会从上次最后标记的日志位置开始读取。

ChangeProcessor接口

  • 其有一个process方法
public void process(JanusGraphTransaction tx, TransactionId txId, ChangeState changeState) {
    for (v in changeState.getVertices(Change.ADDED)) {
         if (v.label().equals("god")) totalGodsAdded.incrementAndGet();
     }
 }
  • JanusGraphTransaction代表正常的图事务,可以利用执行正常的操作。
  • TransactionId txId:事务id值,通过其和获得产生日志的原事务实例id,和执行原事务的图对象实例JanusGraph instance 。
    • 原文:The provided transaction id can be used to investigate the origin of the transaction which is uniquely identified by the combination of the id of the JanusGraph instance that executed the transaction (txId.getInstanceId()) and the instance specific transaction id (txId.getTransactionId()).

Transaction Log Use Cases

Record of Change

  • 统计改变记录

Downstream Updates

  • 事务日志和日志处理框架提供了一些必要工具,用来将一些改变信息通知到其它系统。

Triggers

  • 在原事务中不建议实现触发器(慢呀),而是通过日志处理框架在稍后处理触发器。

Log Configuration

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、平台架构 1.1 接入层 1.1.1 设备采集(IoT)数据采集(DAQ),是指从传感器和其它待测设备等模拟和...
    玄鸟西阅读 2,923评论 0 4
  • Kafka高级特性解析(三) 物理存储 日志存储概述 Kafka 消息是以主题为单位进行归类,各个主题之间是彼此独...
    奋斗的蛐蛐阅读 695评论 0 0
  • 事务不是一个天然存在的东西,它是被人为创造出来的,目的是简化应用层的编程模型。有了事务,应用程序不用考虑并发或各种...
    wangshanshi阅读 687评论 0 1
  • 上节回顾及尾巴 =============== 聚集索引 与 辅助索引 区别 1. 聚集索引 只能有一个,辅助索引...
    张鑫泽_2109阅读 386评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,605评论 28 53