我正在为多线程生产者消费者问题设计解决方案。
产品数量非常多(约100,000),因为消费者每小时运行一次。
有多个生产者线程和一个消费者线程。
Consumer thread是一个每小时执行一次的任务。
消费者线程将数据保存到数据库的最后一小时,对于当前小时,它将其保留在产品集合中。
我开始编写解决方案,如下文所述 classic producer consumer pattern using blockingcollection and tasks .net 4 TPL
我正在考虑更优化的生产和消费产品的方式,为此我想不要检查产品集合的每一行的最后一小时,而是使用带有密钥的ConcurrentDictionary作为Hour(DateTime)。
因此,我不想使用产品,而是想使用ConcurrentDictionary>
之类的东西我认为通过在Hour(DateTime)Key上使用ConcurrentDictionary,Consumer可以轻松选择最后一小时的产品并将其保存到数据库,而不会有按小时过滤产品的负担。
我想以下列方式使用BlockingCollection,但两者似乎都不正确。
使用BlockingCollection>>看起来并不好,因为里面只有一个条目本身就是字典。
使用ConcurrentDictionary>>似乎没有提供BlockingCollection集合的优势,因为消费者/生产者不能直接访问它。
如何在这种情况下使用BlockingCollection? 我是在正确的方法吗?
编辑: 该服务器负载非常高,即每30秒接收4 MB数据并处理它需要50倍的内存。它的服务器有望运行数月。