使用ORM进行大容量数据库更新

Nei*_*ell 8 sql database performance orm caching

我喜欢ORM工具,但我经常认为对于大型更新(数千行),加载,更新和保存时似乎效率低下

UPDATE [table] set [column] = [value] WHERE [predicate]
Run Code Online (Sandbox Code Playgroud)

会提供更好的表现.

但是,假设出于性能原因想要沿着这条路走下去,那么你将如何确保在内存中缓存的任何对象都被正确更新.

假设您正在使用LINQ to SQL,并且您一直在使用DataContext,那么如何确保您的高性能UPDATE反映在DataContext的对象图中?

这可能是"你没有"或"在DB上使用触发器来调用删除缓存的.NET代码"等等,但我很想听到这类问题的常见解决方案.

MrT*_*lly 4

你是对的,在这种情况下,使用 ORM 来加载、更改然后保留记录效率不高。我的流程是这样的

1) 早期实现仅使用 ORM,在我的例子中是 NHibernate

2)随着开发的成熟识别性能问题,其中将包括大型更新

3)将它们重构为sql或SP方法

4)使用Refresh(object)命令更新缓存的对象,

我的大问题是通知其他客户更新已经发生。在大多数情况下,我们接受某些客户端会过时的情况,无论如何,标准 ORM 使用情况就是如此,然后检查更新/插入的时间戳。