Performance 时间戳成本作为实体框架并发控制的一种方法

Performance 时间戳成本作为实体框架并发控制的一种方法,performance,entity-framework,concurrency,Performance,Entity Framework,Concurrency,在并发中,在乐观并发中,控制并发的方法是使用时间戳字段。然而,在我的特殊情况下,并非所有字段都需要在并发性方面进行控制 例如,我有一个products表,其中包含库存量。此表包含描述、代码等字段。。。对我来说,一个用户修改这些字段不是问题,但我必须控制其他用户是否更改库存 因此,如果我使用一个时间戳,一个用户更改描述,另一个用户更改库存量,那么第二个用户将得到一个异常 但是,如果我使用字段stock而不是concurrency exception,那么第一个用户可以更新信息,第二个用户可以毫无问

在并发中,在乐观并发中,控制并发的方法是使用时间戳字段。然而,在我的特殊情况下,并非所有字段都需要在并发性方面进行控制

例如,我有一个products表,其中包含库存量。此表包含描述、代码等字段。。。对我来说,一个用户修改这些字段不是问题,但我必须控制其他用户是否更改库存

因此,如果我使用一个时间戳,一个用户更改描述,另一个用户更改库存量,那么第二个用户将得到一个异常

但是,如果我使用字段stock而不是concurrency exception,那么第一个用户可以更新信息,第二个用户可以毫无问题地更新stock

使用stock字段来控制缓冲区是一个好的解决方案,还是始终使用timestamp字段更好


如果将来我需要添加一个新的重要字段,那么我需要使用两个字段来控制stock和新字段的并发性?它的性能成本高吗?

考虑乐观并发的定义:

在关系数据库管理系统领域,乐观并发控制(OCC)是一种并发控制方法,它假定多个事务可以在不影响彼此的情况下完成,因此事务可以在不锁定它们影响的数据资源的情况下进行。()

显然,这个定义是抽象的,为您的具体实现留下了很大的空间

让我给你举个例子。几年前,我和一群同事评估了同样的事情,我们意识到在我们的应用程序中,在一些表上,并发性仅仅基于用户正在更新的字段是可以的

因此,换句话说,只要他们正在更新的字段在收集行后没有更改,我们就让他们更新行,因为其他字段实际上并不重要,,并且行将在udpate上刷新,以便他们获得其他用户最近的更改


所以,简而言之,我想说你所做的一切都很好,而且没有任何硬性规定。这取决于你需要什么。如果你需要它更灵活,就像你所说的,那么让它更灵活——简单。

好吧,在我的例子中,至少我会有两个字段,股票和对其他产品的引用,所以在这种情况下,我需要两个字段来控制乐观,而不是一个字段,如果我使用时间戳。这很好。在我上面描述的示例中,它是可变的。如果用户更新了三个字段,那么我们在WHERE子句中使用了三个字段,如果他们只更新了一个字段,那么就只有一个字段,这是灵活的。