实际上,从生产实例更新版本化存储库项目是一种非常糟糕的做法,因此我认为您的建议是我能想象的唯一可能的解决方案。您需要一个非版本化的持久存储库(我们称之为InventoryRepository ),其中包含跟踪产品库存的项目描述符(我们称之为stockLevel )。
但是,这种方法背后存在一个陷阱。为了保证产品的库存水平是最新的,您必须禁用对stockLevel项目描述符的缓存。这带来了数据库将因更新而过载的风险,这可能会导致效率问题。
在我的一个项目中,我们通过将库存实现功能移动到另一个服务器实例 (util) 来解决这个问题 - 由异步 DMS 调用触发(其来源是客户的操作,例如将物品放入购物篮)。多亏了这一点,生产实例只从InventoryRepository读取库存水平,而不是更新它们。
这是一个巨大的性能改进,但生产实例仍然非常频繁地读取非缓存值。我们观察到,如果特定设备的库存水平非常高,如果只需要布尔信息(可用或不可用),则无需检查其确切值。因此,我们引入了一个缓存的项目描述符,它为产品 ID分配了一个布尔属性 ( isHighlyAvailable )。在特定产品的库存水平没有降低到阈值(比如 100)之前,isHighlyAvailable被设置为 true,并且生产实例依赖于它的值。一旦达到阈值,isHighlyAvailable 就会被取消设置(通过异步 DMS 消息),并且从现在开始准确的、未缓存的stockLevel在评估产品可用性时,生产实例会考虑价值。