代码之家  ›  专栏  ›  技术社区  ›  Winter

持久队列实现

  •  4
  • Winter  · 技术社区  · 15 年前

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

    2 回复  |  直到 11 年前
        1
  •  4
  •   Community CDub    8 年前

    看看前面的stackoverflow问题:

    Producer/Consumer threads using a Queue

    第一个答案是使用 ExecutorService . 这是一种实现您所希望的功能的方法,但它使用内存中的队列——不过您可以很容易地将其更改为JMS队列。

        2
  •  3
  •   JoeGeeky    15 年前

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

    在许多情况下,这是作为表示相同接口的DAL前面的外观实现的。通过这种方式,其他应用程序认为它们正在与“真实”DAL通信,并且是从其他相关关注点抽象出来的。这种分离允许您在需要时更改它。当对象数据提交到门面时,数据排队,然后控制权返回给调用应用程序。

    一旦排队,您就可以批量更新/插入或继续一次处理一个项目。请记住,事务的概念具有非常不同的含义,因此您需要通盘考虑。

    尽管有技术可以做到这一点…这更多的是一种模式,而不是单一的技术。我没有现成的示例,但您可以从OracleConnecture等产品中查看数据网格文档。寻找后备仓库。