我正在JDJ http://java.sys-con.com/node/415321上阅读一篇关于Java批量处理的文章。该文章提到使用持久性队列作为批量更新程序,而不是立即向数据库发送单独的插入或更新。作者没有给出这个概念的具体例子,所以我用谷歌搜索了持久性队列,但没有提出太多。有谁知道这个好例子?
答案 0 :(得分:4)
看一下之前的Stackoverflow问题:
Producer/Consumer threads using a Queue
第一个答案是使用ExecutorService来实现生产者 - 消费者(这是你想要的)。这是一种做你想要的方法,但它使用内存队列 - 你可以很容易地将它改为JMS队列。
答案 1 :(得分:3)
这种模式有几个名称( Ex.Backing Store,Write-Behind等...... )。这通常出现在数据网格/缓存技术以及其他技术中。通常,域对象存储在某种FIFO或优先级队列中,然后调度程序将它们在备用线程或进程上出列,并将它们传递给您的真实DAL。队列可以在内存中或实际放置在网络队列上,例如ActiveMQ或MSMQ。此外,我已经看到场景中每种类型的数据库操作都有单独的队列。
在许多情况下,这是作为代表相同界面的DAL前面的外观实现的。通过这种方式,其他应用程序认为他们正在与“真正的”DAL进行通信,并从其他相关问题中抽象出来。这种分离允许您在需要时进行更改。当对象数据提交到外观时,数据被排队,然后控制返回到调用应用程序。
排队后,您可以进行批量更新/插入或继续一次处理一个项目。请记住,交易的概念具有非常不同的含义,因此您需要通过思考。
虽然有技术可以做到这一点......这是一种模式,而不是单一技术。我没有方便的示例,但您可以查看Oracle Coherence等产品的数据网格文档。寻找后备商店。