【问题标题】:Persistance Queue Implementation持久队列实现
【发布时间】:2011-02-21 12:16:51
【问题描述】:

我在 JDJ http://java.sys-con.com/node/415321 上阅读了一篇关于 Java 批处理的文章。文章提到使用持久队列作为批处理更新器,而不是立即向数据库发送单个插入或更新。作者没有给出这个概念的具体例子,所以我用谷歌搜索了 Persistence Queue,但没有找到太多。有谁知道这方面的好例子吗?

【问题讨论】:

    标签: java multithreading design-patterns oop persistence


    【解决方案1】:

    这种模式有几个名字(例如 Backing Store、Write-Behind 等......)。这在数据网格/缓存技术以及其他技术中很常见。通常,域对象存储在某种 FIFO 或优先级队列中,然后调度程序在备用线程或进程上将它们出列,并将它们传递给您的真实 DAL。队列可以在内存中,也可以实际放置在诸如 ActiveMQ 或 MSMQ 之类的网络队列中。此外,我还看到了每种类型的数据库操作都有单独的队列的场景。

    在许多情况下,这被实现为代表相同接口的 DAL 前面的外观。通过这种方式,其他应用程序认为它们正在与“真正的”DAL 进行通信,并从其他相关问题中抽象出来。这种解耦允许您在需要时对其进行更改。当对象数据被提交到外观时,数据被排入队列,然后控制权返回给调用应用程序。

    排队后,您可以进行批量更新/插入或继续一次处理一个项目。请记住,交易的概念具有非常不同的含义,因此您需要仔细考虑。

    虽然有一些技术可以做到这一点......这更像是一种模式而不是单一技术。我没有方便的示例,但您可以查看 Oracle Coherence 等产品的数据网格文档。寻找后备商店。

    【讨论】:

      【解决方案2】:

      看看之前的 Stackoverflow 问题:

      Producer/Consumer threads using a Queue

      第一个答案谈到使用ExecutorService 实现生产者-消费者(这是你想要的)。这是做你想做的事情的一种方法,但它使用内存队列——不过你可以很容易地将其更改为 JMS 队列。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 2023-04-05
      • 1970-01-01
      • 2011-10-12
      相关资源
      最近更新 更多