持久化队列实现

4

我正在阅读 JDJ 上有关 Java 批处理的文章,http://java.sys-con.com/node/415321。文章提到使用持久队列作为批量更新器,而不是立即将单个插入或更新发送到数据库。作者没有给出这个概念的具体示例,所以我谷歌了“Persistence Queue”,但并没有找到太多信息。请问是否有人知道一个好的例子呢?

2个回答

4
请看这个之前在Stackoverflow上的问题:

使用队列实现生产者/消费者线程

第一个答案讨论了使用ExecutorService实现生产者-消费者(这是你想要的)。这是一种实现方式,但它使用的是内存队列 - 你可以很容易地将其改为JMS队列。

还有这个:https://dev59.com/303Sa4cB1Zd3GeqPxbj2#2812289 - Justin

3
这种模式有几个名称(例如Backing Store,Write-Behind等)。这通常在数据网格/缓存技术以及其他领域中看到。通常,域对象存储在某种FIFO或优先级队列中,然后调度程序在备用线程或进程上将它们出队并将其传递给您的真实DAL。队列可以是内存中的,也可以实际放置在网络队列上,例如ActiveMQ或MSMQ。此外,我见过场景,其中每种DB操作都有单独的队列。
在许多情况下,这被实现为DAL前面的门面,表示相同的接口。通过这种方式,其他应用程序认为它们正在与“真正”的DAL通信,并且与其他相关问题分离。这种解耦允许您在需要时进行更改。当对象数据提交到门面时,数据会排队,然后控制返回到调用应用程序。
一旦排队,您只需执行批量更新/插入或继续逐个处理项目。请记住,事务的概念具有非常不同的含义,因此您需要仔细考虑。尽管有可以实现此操作的技术...但这更像是一种模式而不是单一技术。我没有可用的示例,但您可以查看来自Oracle Coherence等产品的数据网格文档。查找后备存储。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接