在Java中的线程环境中发出存储过程的最快选项是什么?根据http://dev.mysql.com/doc/refman/5.1/en/connector-j-usagenotes-basic.html#connector-j-examples-preparecall Connection.prepareCall()是一个昂贵的方法。那么当对一个CallableStatement的同步访问不是一个选项时,在每个线程中调用它的选择是什么?在多线程中以Java执行MySQL存储过程的快速方法?
0
A
回答
0
大多数JDBC驱动程序每个连接只使用一个套接字。我认为MySQL也使用一个套接字。在多个线程之间共享一个连接是一个糟糕的性能想法。
如果在不同线程之间使用多个连接,那么每个连接都需要一个CallableStatment。每个连接都需要一个CallabaleStatement池。在这种情况下,最简单的方法是将连接类包装并将所有调用委托给原始类。 Eclipse的创建速度非常快。在包装方法prepareCall()中,您可以添加一个简单的池。您还需要一个CallableStatement的包装类。 close方法将CallableStatement返回到池中。
但是,首先你应该检查是否真的很贵,因为很多司机已经有这样的民意调查。创建一个prepareCall()和close()循环并计算时间。
0
连接不是线程安全的,所以你不能跨线程共享它。
当你的prepareCall,JDBC驱动程序(可能)是告诉RDBMS系统做了很多存储在服务器端的工作。你可能在这里犯了过早的优化。
0
给这个稍加思考后,它看来,如果您有问题,与此基础结构代码,然后你的问题是在其他地方。大多数应用程序不需要花费过多的时间来完成这些工作。
确保您使用的是DataSource,大部分都是连接缓存,有些甚至是缓存语句。
也是因为这是一个性能瓶颈,这意味着你正在一个接一个地做很多查询,或者你的连接池太小。也许你应该在你的代码上做一些基准测试,看看存储过程需要多长时间,而JDBC代码需要多少时间。
当然,我会遵循MySQL使用CallableStatement的建议,我相信他们已经对此进行了基准测试。大多数应用程序不会在线程之间共享任何内容,这很少是问题。
相关问题
- 1. 从PHP执行java MySQL存储过程
- 2. 无法执行MySQL存储过程
- 3. 执行Mysql存储过程的问题
- 4. 为什么此存储过程在Management Studio中快速执行,但不在应用程序中执行?
- 5. 用多参数在Loopback远程方法中执行Postgres存储过程
- 6. Java:通过多线程并行化快速排序
- 7. 在另一个存储过程中未执行存储过程
- 8. 在存储过程中执行存储过程
- 9. MySQL存储过程执行错误
- 10. mysql存储过程执行SHOW CREATE TABLE
- 11. 使用DBVisualizer执行MYSQL存储过程
- 12. 在多线程进程中运行存储过程
- 13. 执行在多线程静态方法
- 14. MySQL线程快速增长
- 15. 无法让我的存储过程在MySQL上执行
- 16. 通过Java中的线程控制方法的执行
- 17. 具有多种方法的Java类可以在线程中执行
- 18. isAlive()在java多线程中执行
- 19. 在SQL Server中执行存储过程
- 20. 在视图中执行存储过程?
- 21. SSRS在Oracle中执行存储过程
- 22. 在sql profiler中执行存储过程
- 23. 在vb.net中执行存储过程
- 24. 在存储过程中执行FuncView
- 25. 在EntityFramework中执行Oracle存储过程
- 26. 在报告中执行存储过程
- 27. 执行SQL存储过程
- 28. 当执行存储过程
- 29. 快速多线程问题
- 30. 快速排序与更多的线程执行更差