代码之家  ›  专栏  ›  技术社区  ›  Aravind Yarram

com.buckpop.blueprints.Graph对象线程是否安全?

  •  1
  • Aravind Yarram  · 技术社区  · 11 年前

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

    当前实施情况 由于我没有任何并发需求,我在服务层中构建了一个Graph对象,并将其传递给每个客户端库,它们将使用同一个Graph实例

    新实施—满足SLA

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

    1. 在此场景中,每个客户端库是否可以使用从服务层传递的同一graph实例来构建子图?
    2. 还是有更好的方法来处理?

    编辑

    如何使用对象

    1. 客户端发送REST请求以提取人员数据
    2. 个人数据存储在3个不同的数据存储中
    3. 服务层创建 com.tinkerpop.blueprints.impls.tg.TinkerGraph 分享 它在3个不同线程中同时从3个不同的存储中检索数据。 每个线程还负责向 共享 图形实例。
    1 回复  |  直到 11 年前
        1
  •  2
  •   stephen mallette    11 年前

    这取决于 Graph 接口实现。例如,如果您正在使用 TinkerGraph 它不能保证线程安全。 Neo4jGraph 使用 ThreadLocal 变量来管理事务,这意味着您可以共享相同的事务 Neo4j图形 没有任何问题。蓝图还允许通过 ThreadedTransactionalGraph :

    https://github.com/tinkerpop/blueprints/wiki/Graph-Transactions#threadedtransactionalgraph-and-multi-threads-for-one-transaction

    但你必须找到 图表 支持该功能的。

    推荐文章