com.tinkerpop.blueprints.Graph 对象是线程安全的吗?
Is com.tinkerpop.blueprints.Graph object thread-safe?
我有一个用例,在该用例中,我根据从多个数据存储中检索到的数据构建图表。这些数据存储中的每一个都有自己的客户端库,用于构建表示特定数据存储数据的 子图 。
当前实施
因为,我没有任何并发要求,所以我在服务层构建了一个单一的 Graph 对象,并将其传递给每个客户端库,它们将使用相同的 Graph 实例
新实施 - 满足 SLA
为了满足 SLA,我想同时从这些数据存储中提取数据。
- 在这种情况下,每个客户端库是否可以使用从服务层传递的相同 Graph 实例来构建子图?
- 或者有更好的方法来处理这个问题吗?
编辑
对象的使用方式
- 客户端发送 REST 请求拉取人员数据
- 人员数据存储在 3 个不同的数据存储中
- 服务层创建了一个
com.tinkerpop.blueprints.impls.tg.TinkerGraph
的实例,并 在 3 个不同的线程中共享 它,同时在 3 个不同的线程上从 3 个不同的存储中检索数据。 每个线程还负责将拉取的数据添加到 shared Graph 实例。
这取决于Graph
接口实现。例如,如果您使用 TinkerGraph
,则它不保证线程安全。 Neo4jGraph
使用 ThreadLocal
变量来管理事务,这意味着您可以毫无问题地与多个线程共享同一个 Neo4jGraph
实例。蓝图还允许通过 ThreadedTransactionalGraph
:
进行多线程事务
但你必须找到支持该功能的Graph
。
我有一个用例,在该用例中,我根据从多个数据存储中检索到的数据构建图表。这些数据存储中的每一个都有自己的客户端库,用于构建表示特定数据存储数据的 子图 。
当前实施 因为,我没有任何并发要求,所以我在服务层构建了一个单一的 Graph 对象,并将其传递给每个客户端库,它们将使用相同的 Graph 实例
新实施 - 满足 SLA
为了满足 SLA,我想同时从这些数据存储中提取数据。
- 在这种情况下,每个客户端库是否可以使用从服务层传递的相同 Graph 实例来构建子图?
- 或者有更好的方法来处理这个问题吗?
编辑
对象的使用方式
- 客户端发送 REST 请求拉取人员数据
- 人员数据存储在 3 个不同的数据存储中
- 服务层创建了一个
com.tinkerpop.blueprints.impls.tg.TinkerGraph
的实例,并 在 3 个不同的线程中共享 它,同时在 3 个不同的线程上从 3 个不同的存储中检索数据。 每个线程还负责将拉取的数据添加到 shared Graph 实例。
这取决于Graph
接口实现。例如,如果您使用 TinkerGraph
,则它不保证线程安全。 Neo4jGraph
使用 ThreadLocal
变量来管理事务,这意味着您可以毫无问题地与多个线程共享同一个 Neo4jGraph
实例。蓝图还允许通过 ThreadedTransactionalGraph
:
但你必须找到支持该功能的Graph
。