我正在使用WebFlow,Hibernate 3,Oracle 11g和JSF 2.x构建相当复杂的Java应用程序,3.2版本。
简而言之,每个用户都可以构建自己的网页,在应用程序中创建公共网站。由于所有内容都必须可自定义,因此它也非常通用,每个页面都由数据库实体定义的文章,翻译,菜单等组成。
每当访问网页时,hibernate都会执行一系列SELECT查询来收集所有数据。这是相对较快的,因为页面在距离数据库大约10毫秒内加载,但每页执行大约4-5个查询。
因此,如果client1访问页面A,则执行5个查询。
我的雇主担心同时查询的数量可能是Oracle数据库的问题。例如,如果1000个用户同时访问不同的页面,则需要执行大约5000个查询。注意我使用标准的Spring连接池等。
我的第一个问题是:Oracle数据库可以同时处理多少个SELECT查询?运行太多查询真的是一个问题吗?我确实找到了有关并发会话的一些信息,但没有找到关于查询的信息,这些信息不应该是并发的,因为它们是只读的。你有什么经历?
我已经实施了一些优化改进:
1)一些信息(如翻译)存储在内存中。但我相信,apache服务器的内存耗尽比Oracle数据库耗尽查询更多。
2)在有意义的地方我使用了FetchType.JOIN来减少查询次数。当只涉及一个连接时,这很好用,但是我担心复杂性增加太多(即5连接和连接),性能会下降到底部。你怎么看待这个?
总之,这是一个真正的问题,如果是这样,修改它的最佳策略是什么?
非常感谢您提供的任何帮助。如果您需要特定代码或JdbcLogger日志,请告诉我。
P.S。当然不能改变基础设施(spring webflow,jsf等)。