com.tinkerpop.blueprints.Graph对象线程安全吗?

com.tinkerpop.blueprints.Graph对象线程安全吗?,graph,titan,tinkerpop,tinkerpop-blueprint,tinkergraph,Graph,Titan,Tinkerpop,Tinkerpop Blueprint,Tinkergraph,我有一个用例,其中我从多个数据存储中检索的数据构建了一个图表。这些数据存储中的每一个都有自己的客户端库,它构建表示特定数据存储数据的子图 当前实施情况 因为我没有任何并发性要求,所以我在服务层构建了一个图形对象,并将其传递给每个客户机库,它们将使用相同的图形实例 新实施-满足SLA要求 为了满足SLA,我想同时从这些数据存储中提取数据 在这个场景中,每个客户机库是否可以使用从服务层传递的同一个图实例构建子图 还是有更好的方法来处理这个问题 编辑 如何使用对象 客户端发送一个REST请求以提取人员

我有一个用例,其中我从多个数据存储中检索的数据构建了一个图表。这些数据存储中的每一个都有自己的客户端库,它构建表示特定数据存储数据的子图

当前实施情况 因为我没有任何并发性要求,所以我在服务层构建了一个图形对象,并将其传递给每个客户机库,它们将使用相同的图形实例

新实施-满足SLA要求

为了满足SLA,我想同时从这些数据存储中提取数据

  • 在这个场景中,每个客户机库是否可以使用从服务层传递的同一个图实例构建子图
  • 还是有更好的方法来处理这个问题
  • 编辑

    如何使用对象

  • 客户端发送一个REST请求以提取人员数据
  • 人员数据存储在3个不同的数据存储中
  • 服务层创建
    com.tinkerpop.blueprints.impls.tg.TinkerGraph
    的实例,并在3个不同的线程之间共享它,在3个不同的线程上同时从3个不同的存储中检索数据。每个线程还负责将拉入的数据添加到共享的图形实例

  • 它取决于
    图形
    接口实现。例如,如果您使用的是
    TinkerGraph
    ,则无法保证线程安全
    Neo4jGraph
    使用
    ThreadLocal
    变量来管理事务,这意味着您可以与多个线程共享相同的
    Neo4jGraph
    实例,而不会出现任何问题。蓝图还允许通过
    ThreadedTransactionalGraph
    进行多线程事务:


    但是您必须找到一个支持该函数的
    图形。

    加上一个。我使用“com.tinkerpop.blueprints.impls.tg.TinkerGraph”obj来表示内存中的图形。关于这个问题,请参阅我的编辑部分。这个对象是线程安全的还是应该封装在ThreadedGraph中?我会小心从不同的线程写入
    TinkerGraph
    。我不能说会有什么问题,但我不能保证你在这方面不会有问题。我可能会生成三个单独的线程,只从不同的存储中获取数据,然后从收集的数据在单个线程中构建
    TinkerGraph
    。如果“com.tinkerpop.blueprints.impls.tg.TinkerGraph”不是线程安全的,我会将此作为备份计划。感谢您确认螺纹安全保证。备份计划现在是唯一的选择:-)向TinkerGraph添加事务支持需要什么?我可以提交一个补丁。我需要这个功能。另外,这里具体的线程安全问题是什么?请注意,目前蓝图主要处于维护模式,因此任何开发都主要集中在bug修复上。所有的焦点都集中在TP3上:在这一点上,如果您需要TP2中的那个特性,我建议您使用TinkerGraph。在TP3中,TinkerGraph也有类似的限制,因为它意味着“简单”和轻量级操作。