2014-04-01 48 views
0

我在Amazon Web Services EC2上托管的Tomcat上运行JNDI JDBC连接池,该服务与Amazon Web Services PostgreSQL关系数据库进行交谈。Amazon EC2上的不完整结果集

我有一个包含40,000行数据的表,我尝试使用JDBC PreparedStatement“SELECT * FROM tableName”一次性收集数据。

的东西,这个组合完美的作品,收集所有40000行,当我在我的本地机器上运行的servlet(从我本地的Tomcat),并把它通过分贝-name.aws-RDS-URL交谈的RDS :5432,但是,当我在AWS EC2上运行相同的servlet并指示它与本地vLAN上的RDS通信时,它永远不会超过30,000行,结果集只有2000行。每次刷新它时,它都会产生一个新的但不完整的行数。

下面是我在Tomcat的全局context.xml中的条目(我在多个servlet中使用相同的数据源)。

< Resource 
name="jdbc/postgres4" 
auth="Container" 
type="javax.sql.DataSource" 
maxActive="8" 
maxIdle="8" 
driverClassName="org.postgresql.Driver" 
url="jdbc:postgresql://dn-name.aws-rds-URL:5432/SID" 
username="db-username" 
password="password" /> 

有什么想法可能会误入歧途?

+0

获取大小可能?不知道,但也许亚马逊有一些超时设置为您的查询(弹性=没有可能需要太长时间) - 请参阅http://docs.aws.amazon.com/redshift/latest/dg/jdbc-fetch-size-parameter.html – Leo

+0

是的,我试着用1000; 10,000;和40,000 fetchSize,无效:( – adv

+0

客户端大小的内存不足错误是我需要调查,因为我目前正在使用一个微EC2实例 – adv

回答

0

这根本不是数据库问题......我在while(rs.next())循环中添加了一个计数器,并且每次都以40,000结束,而servlet row nums与之前不同。

我设法从谷歌地图制作工具番石榴()ConcurrentMap到Java的ConcurrentHashMap切换为解决这个问题,但现在我不得不面对再次在Java HashMap的GC内存问题...