如何有效地处理服务器端列表中的大量对象
How to effectively process lot of objects on a list on server side
我有一个包含很多对象的列表。
问题是我必须处理这些对象(过程包括克隆、深层复制和进行数据库调用、运行 业务逻辑等
以正常方式执行此操作,先到先得确实非常耗时,并且在 Web 应用程序中,这通常会导致服务器端的事务超时(因为从客户端角度来看,此处理是 anync)。
我如何处理这些对象才能花费最少的时间而不会使数据库过载。
我在服务器环境中使用 java 7。
我已经在使用消息传递解决方案 rabbitmq,它可以为我提供商品及其数量。当我尝试深度复制项目以模仿真实项目(业务逻辑每个项目都应该被唯一处理)并将它们保存到数据库时出现问题。
经过一些讨论,可行的解决方案是使用由线程池处理的 ABQ(数组阻塞队列)。
以下是经过深思熟虑的好处:
1) 我们将不必管理创建的第 3 方队列,例如兔子
2) 在任何时间点,阻塞队列不会有所有要处理的项目,因为消费者线程将同时处理它们,因此它会留下更少的内存占用。
@cody123 在这种情况下,我使用 spring 批处理重试机制。
经过另一轮分析后,我发现瓶颈是最大连接数较低的数据库连接池。
我通过 运行 没有数据库线程池的相同事务推断出这一点,它运行得非常好并且毫无例外地完成了。
然而,结合之前的方法,即使用 HA DB 管理 ABQ 和轻型提交将是最好的解决方案。
我有一个包含很多对象的列表。 问题是我必须处理这些对象(过程包括克隆、深层复制和进行数据库调用、运行 业务逻辑等
以正常方式执行此操作,先到先得确实非常耗时,并且在 Web 应用程序中,这通常会导致服务器端的事务超时(因为从客户端角度来看,此处理是 anync)。
我如何处理这些对象才能花费最少的时间而不会使数据库过载。
我在服务器环境中使用 java 7。
我已经在使用消息传递解决方案 rabbitmq,它可以为我提供商品及其数量。当我尝试深度复制项目以模仿真实项目(业务逻辑每个项目都应该被唯一处理)并将它们保存到数据库时出现问题。
经过一些讨论,可行的解决方案是使用由线程池处理的 ABQ(数组阻塞队列)。 以下是经过深思熟虑的好处:
1) 我们将不必管理创建的第 3 方队列,例如兔子 2) 在任何时间点,阻塞队列不会有所有要处理的项目,因为消费者线程将同时处理它们,因此它会留下更少的内存占用。
@cody123 在这种情况下,我使用 spring 批处理重试机制。
经过另一轮分析后,我发现瓶颈是最大连接数较低的数据库连接池。 我通过 运行 没有数据库线程池的相同事务推断出这一点,它运行得非常好并且毫无例外地完成了。 然而,结合之前的方法,即使用 HA DB 管理 ABQ 和轻型提交将是最好的解决方案。