我必须坚持不断收到的消息流。出于性能原因,我等到有一组合理的消息后再将它们发送到数据库。我将这些消息保存在一个集合 C 中。每当在数据库中添加消息时,我都会收到 JMS 的通知。
我想对数据库中存在的对象和 C 中的对象进行查询。
是否有解决此问题的通用设计模式?我是否必须将数据库的副本保存在内存中的集合中?如果我尝试读取数据库的内容,然后读取 C 的内容,然后将它们放在一起以对这个融合进行查询,我如何确保在这样做时另一个线程没有清空 C 并将其放入数据库?
谢谢
我必须坚持不断收到的消息流。出于性能原因,我等到有一组合理的消息后再将它们发送到数据库。我将这些消息保存在一个集合 C 中。每当在数据库中添加消息时,我都会收到 JMS 的通知。
我想对数据库中存在的对象和 C 中的对象进行查询。
是否有解决此问题的通用设计模式?我是否必须将数据库的副本保存在内存中的集合中?如果我尝试读取数据库的内容,然后读取 C 的内容,然后将它们放在一起以对这个融合进行查询,我如何确保在这样做时另一个线程没有清空 C 并将其放入数据库?
谢谢
如果要查询数据(可能是 SQL SELECT),则必须将集合刷新到数据库。
你至少有几个选择:
1)使用互斥锁锁定数据库访问。当您需要查询、锁定、刷新集合到 DB、查询、解锁时。
2) 为处理集合/DB 的线程的输入队列设计一条消息,指示它将集合刷新到 DB,在刷新时发出“FlushComplete”condvar 信号,然后等待另一个“Continue”condvar。排队消息,等待 FlushComplete,查询,信号 Continue。
我可能会选择(2)。
你试过用AKKA吗?它是一个非常易于使用的代理系统,可以轻松解决您的 pb 问题,并在您想使用异步系统和多线程时提供一些很好的设计模式