我需要设计一个实时产品库存管理引擎(C#和WCF),但我不知道如何处理并发访问和数据完整性。
以下是引擎应该处理的一些功能:
我可以使用MSMQ以确保正确的库存计数(按消息池顺序处理的消息)或者我可以使用应用程序线程锁定。
请注意,我的申请必须是实时的,编制者必须及时了解库存中有多少产品。如果在采摘时缺少产品,他可以向运营商发送“请求”。
答案 0 :(得分:2)
使用SQL数据库。它们的设计考虑了数据完整性,并发性和数据存储。
答案 1 :(得分:1)
你可能应该使用SQL数据库,正如Lee所说。如果您使用交易,例如存储订单并减少可用的产品计数(在同一事务中)数据库保证原子性。您可能还需要某种并发机制(如行版本)来防止不一致的值(第一个进程读取,第二个进程更新相同的值,然后第一个进程更新也会根据过时的值覆盖以前的更新)。
答案 2 :(得分:0)
您提到的场景通常是必须使用队列而不是持久存储来满足吞吐量需求的场景。在网上搜索时,您可以找到许多案例研究,人们使用排队系统来提高系统的吞吐量。 SQL服务器可能无法扩展到该级别。
在特殊情况下,当您需要使队列持久化时,会使用非常特殊的方法来解决因此导致的性能影响。对于前者Apache的ActiveMQ有自己的特殊文件存储系统,与简单地使用MySQL作为后端持久性相比,它的性能要好得多。可能MSMQ也提供了类似的选项,但我不确定。