1

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

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

新实施 - 满足 SLA

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

  1. 在这种情况下,每个客户端库是否可以使用从服务层传递的相同 Graph 实例来构建子图?
  2. 或者有没有更好的方法来处理这个?

编辑

如何使用对象

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

1 回答 1

2

这取决于Graph接口的实现。例如,如果您正在使用TinkerGraph它,则不保证线程安全。 Neo4jGraph使用ThreadLocal变量来管理事务,这意味着您可以Neo4jGraph与多个线程共享同一个实例而不会遇到任何麻烦。蓝图还允许通过以下方式进行多线程事务ThreadedTransactionalGraph

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

但你必须找到一个Graph支持该功能的。

于 2015-02-03T13:48:13.330 回答