首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JPA/Toplink批量插入

使用JPA/Toplink批量插入
EN

Stack Overflow用户
提问于 2008-09-15 17:09:27
回答 2查看 6.8K关注 0票数 2

我有一个web应用程序,它通过HTTP接口接收消息,例如:

代码语言:javascript
复制
http://server/application?source=123&destination=234&text=hello

此请求包含发件人的ID、收件人的ID和消息的文本。

此消息应处理如下:

从database

  • creating中为源和目标查找匹配的用户对象的
  • 对象对象树:包含消息文本字段和源的两个用户对象的消息,以及指向数据库的
    • 树。

树将由其他我无法触摸的应用程序加载。

我使用Oracle作为后台数据库,使用JPA与Toplink一起执行数据库处理任务。如果可能的话,我会和这些呆在一起。

在没有太多优化的情况下,我可以在我的环境中达到30次请求/秒吞吐量。这并不多,我需要300次请求/秒。因此,我测量了性能瓶颈所在,发现对em.persist()的调用占用了大部分时间。如果我简单地注释掉这一行,吞吐量将远远超过1000个请求/秒。

我尝试编写一个小型测试应用程序,它使用简单的JDBC调用将100万条消息持久化到同一个数据库。我使用批处理,这意味着我执行了100次插入,然后进行了一次提交,并重复执行,直到所有记录都在数据库中。我在这个场景中测量了500次请求/秒吞吐量,这将满足我的需求。

很明显,我需要在这里优化插入性能。但是,正如我前面提到的,我希望继续使用JPA和Toplink来实现这一点,而不是使用纯JDBC。

您知道用JPA和Toplink创建批插入的方法吗?您能推荐其他提高JPA持久化性能的技术吗?

附加信息:

“请求/秒”的意思是:从测试开始到写入数据库的最后记录的请求总数/总时间。

我试图通过在servlet内容和持久器之间创建内存中的队列来调用em.persist()异步。它极大地帮助了演出。然而,队列确实增长得非常快,而且由于应用程序将连续接收200个请求/秒,这对我来说不是一个可接受的解决方案。

在这种解耦的方法中,我收集了100毫秒的请求,并在执行事务之前对所有收集的项调用了em.persist()。EntityManagerFactory被缓存在每个事务之间。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-09-15 20:03:25

您应该与JPA接口分离,并使用裸的TopLink API。您可能会丢弃要持久化到UnitOfWork中的对象,并按计划提交UnitOfWork (同步或异步)。注意,em.persist()的代价之一是整个对象图的隐式克隆。如果您自己使用TopLink ()您的两个用户对象,从而保存它必须进行的身份测试,那么uow.registerObject会工作得更好。所以你最终会:

代码语言:javascript
复制
uow=sess.acquireUnitOfWork();
for (job in batch) {
 thingyCl=uow.registerObject(new Thingy());
 user1Cl=uow.registerObject(user1);
 user2Cl=uow.registerObject(user2);
 thingyCl.setUsers(user1Cl,user2Cl);
}
uow.commit();

这是一个非常古老的学校,TopLink,顺便说一下;)

请注意,批处理将有很大帮助,因为批处理写入,特别是带有参数绑定的批处理写入将启动,对于这个简单的示例来说,这可能会对您的性能产生非常大的影响。

其他需要寻找的东西:你的排序大小。在TopLink中编写对象所花费的大量时间实际上是用于从数据库中读取排序信息,特别是在小的默认情况下(我可能会有几百个甚至更多的序列大小)。

票数 3
EN

Stack Overflow用户

发布于 2008-09-15 19:12:36

你对“请求/秒”的衡量标准是什么?换句话说,第31次请求会发生什么?什么资源被封锁了?如果是前端/servlet/web部分,那么可以在另一个线程中运行em.persist()并立即返回吗?

另外,您是否每次都创建事务?您是否使用每个请求创建EntityManagerFactory对象?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档