我有一个用例,我根据从多个数据存储中检索的数据构建图表。每个数据存储都有自己的客户端库,用于构建表示特定数据存储数据的子图。
当前实施 因为,我没有任何并发要求,我在服务层构建一个Graph对象并将其传递给每个客户端库,并且它们将使用相同的Graph实例
新实施 - 符合SLA
为了满足SLA,我想同时从这些数据存储中提取数据。
修改
如何使用对象
com.tinkerpop.blueprints.impls.tg.TinkerGraph
和共享的实例,在3个不同的线程上同时从3个不同的存储中检索数据。 每个线程还负责将提取的数据添加到共享图表实例。 答案 0 :(得分:2)
这取决于Graph
接口实现。例如,如果您使用TinkerGraph
,则不保证线程安全。 Neo4jGraph
使用ThreadLocal
变量来管理事务,这意味着您可以毫不费力地与多个线程共享同一个Neo4jGraph
实例。蓝图还允许通过ThreadedTransactionalGraph
进行多线程交易:
但您必须找到支持该功能的Graph
。