Java 优化对heroku Postgresql数据库的写入

Java 优化对heroku Postgresql数据库的写入,java,database,postgresql,heroku,talend,Java,Database,Postgresql,Heroku,Talend,我们正在处理相当多的传入事件,我们使用Talend处理这些事件,然后将它们推送到不同的postgresql数据库(本地和远程heroku db)。由于会话选项setAutoCommit(true),我们面临着巨大的性能损失,尤其是在heroku数据库上(每个语句/插入都是必须提交的新事务) 不幸的是,由于talend错误,我们无法批量提交以提高性能。由于产生的开销,我想更改会话以进行Asynchronous提交,但是在java.sql.Connection文档中,我找不到任何有用的信息。从tal

我们正在处理相当多的传入事件,我们使用Talend处理这些事件,然后将它们推送到不同的postgresql数据库(本地和远程heroku db)。由于会话选项setAutoCommit(true),我们面临着巨大的性能损失,尤其是在heroku数据库上(每个语句/插入都是必须提交的新事务)

不幸的是,由于talend错误,我们无法批量提交以提高性能。由于产生的开销,我想更改会话以进行Asynchronous提交,但是在java.sql.Connection文档中,我找不到任何有用的信息。从talend到postgresql,我们使用一个持久连接

我的问题是:

  • 是否可以通过java连接/驱动程序(postgresql 9.3)配置异步提交?我们希望在会话的基础上配置它,而不是针对整个数据库
  • 我还有什么其他选择可以减少事务开销?就像我说的,现在每个插入都在每个事务中
  • 还有其他选择吗
链接:

  • java文档:
  • 关于

我没有在Talend中使用PostgreSQL,但插入通常是成批完成的,只有Talend的默认行为会自动提交它们-我假设这是您在这里看到的会话选项


您可以尝试将作业设置为使用tPostgreSQLConnection,然后使用tpostgresqlcommitonsubjobok完成作业,以便一次完成全部提交。单次插入批次的性能可能会很差,但应该会有所改善。

Talend的错误是什么阻止了批量插入?我在上面找不到打开的JIRA。JIRA票证是今天由talend支持部门打开的,但我不知道它是否公开()。票证描述了将RESTWeb服务与tpostgresqloutput组件一起使用时的问题。如果与rest web服务结合使用,组件上的“使用现有连接”和“使用批处理大小”这两个选项都不起作用。对于第一种选择,我们已经找到了解决办法,但对于第二种,我们仍在寻找解决方案。显然,我现在看不到问题的答案。我假设您直接在组件中建立连接,而不是使用tpostgresqlconnection组件来避免第一个问题?这就排除了使用tPostgreSQLCommit组件的可能性。我不确定错误是如何表现出来的,但一个选项可能是散列通常发送到Postgres的数据,然后在另一个子对象中单独读取该散列,并在您的tPostgreSQLOutput组件之后使用带有tPostgreSQLCommit的tPostgreSQLConnection。是否在当前的作业中使用RESTful web服务组件全部或是否在数据流中?如果性能是一个巨大的阻力,那么您有两个潜在的选择:如果您可以在同一个作业中使用RESTful和Postgres组件,但不能在同一个子作业中使用,那么可能会对web服务的结果进行散列(post JSON处理)然后使用正确的tPostgreSQLConnection和tPostgreSQLCommit系列子作业将哈希读回子作业。如果您甚至不能这样做,并且性能非常关键,那么您可以使用作业将数据放入临时平面文件或备用数据库,然后再使用另一个作业将数据从那里提取到子作业预期的研究生目标。您还需要另一份工作来清理临时表/平面文件。这很可怕,但如果这真的只是RESTful和Postgres的组合问题,这将是一个更好的解决方法。除此之外,您还可以使用与插入并行的计数器++来执行tJava,然后使用if链接,当计数器达到100左右时,您可以执行提交。计数器+=(计数器>1000?-1000:1)这不是个坏主意,但我可能会将计数器放入数据流中的数字序列中,以使计数器更简单。一般来说,我也喜欢在工作范围内提交(只在最后提交所有内容)除非我特别需要,否则,如果你不必担心在作业失败之前可能会犯下的错误,那么错误恢复会简单得多。通常我会对你感到不满,但请记住,这项Web服务将7/24运行,因此即使是我的想法也不是最好的。,如果只有90个insert,那么在几个小时内,您仍然不想提交新的insert。也许每5-10-15分钟就可以克服一次暴力犯罪。