我使用彈簧引導構建了一個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. 使用Direct2D和DXGI(D3D interop)進行多線程的最佳做法是什麼?
- 2. 管理容器中線程池的最佳做法是什麼?
- 3. 在Android上使用SVG圖標的最佳做法是什麼?
- 4. 使用點斜線的最佳做法是什麼?
- 5. Android上的多線程處理程序的最佳做法是什麼?
- 6. 使用AES_ENCRYPT的最佳做法是什麼?它有多安全?
- 7. 在MVVM中使用ISupportIncrementalLoading的最佳做法是什麼?
- 8. 在Wordpress中使用DB的最佳做法是什麼?
- 9. 在html中使用Anchors的最佳做法是什麼?
- 10. 什麼是在繼承類中使用鎖的最佳做法
- 11. 在線發佈/ doc文件夾的最佳做法是什麼
- 12. 使用jquery/javascript做下面的最佳做法是什麼?
- 13. 什麼是ViewModel的最佳做法
- 14. 什麼是計算直線最小斯坦納樹的最佳算法?
- 15. 泰坦使用多線程添加頂點
- 16. 什麼是WPF多線程的最佳方法
- 17. git用於多語言實現的最佳做法是什麼?
- 18. HMAC解決方案中密鑰的使用(最佳/最佳做法)是什麼?
- 19. 在interacitve開發過程中使用clojure.repl函數的最佳做法是什麼?
- 20. 在Android中線程的最佳方法是什麼?
- 21. 在Codeigniter中顯示多個視圖的最佳做法是什麼?
- 22. ASP.NET緩存,什麼是最佳做法
- 23. WCF休息 - 最佳做法是什麼?
- 24. Nginx和runit ....什麼是最佳做法
- 25. 在Android上緩存圖像的最佳做法是什麼?
- 26. 這些路線的最佳做法是什麼?
- 27. 處理應用程序配置的最佳做法是什麼?
- 28. 從WinForms應用程序打印的最佳做法是什麼?
- 29. 擴展android應用程序的最佳做法是什麼?
- 30. 使用EC2可用區域的最佳做法是什麼?
有人請幫幫我!我使用大型web服務的泰坦圖,並且我真正關心泰坦圖的性能,以防萬一許多服務請求。 – MichaelP