我使用弹簧引导构建了一个Web服务。我使用titan图形作为可以跨Web服务访问的单例。因此,如果对Web服务有多个请求,Web服务器将产生线程来处理请求,并且Titan图将用于这些线程。这种方法有什么问题吗?我使用泰坦图1.0.0和tinkerpop 3.0.1孵化。所以泰坦图对我来说是相当新的,我不知道在多线程中是否有任何使用泰坦图的冲突。如果这种方法有问题,那么在多线程中使用泰坦图最好的做法是什么?感谢您的帮助。在多线程中使用泰坦图的最佳做法是什么?
回答
以这种方式使用Titan是完全可以接受的。您只需确保事务不会在请求之间泄漏。根据TinkerPop语义,Graph
实例上的事务绑定到当前线程。因此,根据请求的成功或失败,每个HTTP请求的结束需要使用commit()
或rollback()
关闭事务。如果您对自己始终关闭交易的能力甚至略微不确定,那么您应该考虑在请求开始时发出rollback()
以清除之前的任何陈旧状态。
谢谢你的回复。我想再问一个问题。我使用TitanGraph作为单例,当我打开图形时,我也从图形中产生GraphTraversalSource,并且我还像使用TitanGraph一样使用GraphTraversalSource作为单例。那么可以在多线程中使用GraphTraversalSource单例,还是需要为每个线程产生一个呢?谢谢。 – MichaelP
它应该是安全的重新使用。 –
是的,去吧。如果您正在使用Titan,请务必阅读multi-threaded transactions上的文档。
使用Blueprints的默认事务处理,每个线程都会根据图形数据库自动打开自己的事务。要打开一个线程无关的事务,请使用
newTransaction()
方法。newTransaction()
方法返回一个新的TransactionalGraph
对象,该对象表示此新打开的事务。图对象tx支持原始图所做的所有方法,但是这样做并不会为每个线程打开新的事务。这允许我们启动多个线程,这些线程在同一个事务中同时工作,其中一个线程在所有线程完成其工作时最终提交事务。
如果您使用的库可能在多个线程之间传递单个概念性事务,例如,这可能会更安全。通过使用延期或承诺。
谢谢你的答案 – MichaelP
- 1. 什么是泰坦数据类型的最佳做法?
- 2. 使用Direct2D和DXGI(D3D interop)进行多线程的最佳做法是什么?
- 3. 管理容器中线程池的最佳做法是什么?
- 4. 最佳做法是什么?
- 5. 在Android上使用SVG图标的最佳做法是什么?
- 6. 使用点斜线的最佳做法是什么?
- 7. Android上的多线程处理程序的最佳做法是什么?
- 8. 使用AES_ENCRYPT的最佳做法是什么?它有多安全?
- 9. 在Flex Mobile应用程序中使用泰语的最佳字体是什么?
- 10. 在nodejs中使用redis的最佳做法是什么?
- 11. 在html中使用Anchors的最佳做法是什么?
- 12. 在MVVM中使用ISupportIncrementalLoading的最佳做法是什么?
- 13. 在Wordpress中使用DB的最佳做法是什么?
- 14. 什么是在继承类中使用锁的最佳做法
- 15. 什么是多线程编程的最佳排序算法?
- 16. 控制多个视图的最佳做法是什么?
- 17. 在线发布/ doc文件夹的最佳做法是什么
- 18. 使用jquery/javascript做下面的最佳做法是什么?
- 19. 在WordPress帖子中使用JavaScript,最佳做法是什么?
- 20. 无法在泰坦
- 21. log4cxx的最佳做法是什么?
- 22. 什么是ViewModel的最佳做法
- 23. 什么是计算直线最小斯坦纳树的最佳算法?
- 24. 什么是WPF多线程的最佳方法
- 25. 泰坦使用多线程添加顶点
- 26. 什么是在Android应用中实现多线程的最佳/首选方法
- 27. HMAC解决方案中密钥的使用(最佳/最佳做法)是什么?
- 28. git用于多语言实现的最佳做法是什么?
- 29. 在Android中线程的最佳方法是什么?
- 30. 在interacitve开发过程中使用clojure.repl函数的最佳做法是什么?
有人请帮帮我!我使用大型web服务的泰坦图,并且我真正关心泰坦图的性能,以防万一许多服务请求。 – MichaelP