2013-04-23 147 views
1

我正在开发一个使用实体框架访问数据库的.net客户端应用程序。这是一个多用户应用程序,有时可能几天内没有任何更改,有时一次有数百个更改。在数据库更改时重新加载缓存

我需要缓存非常多的数据,因为需要完成一些检查并显示给用户。当一个应用程序实例中的某些内容发生更改时,我解决了一个缓存更新其他缓存的问题然而,我不确定当应用程序的其他实例发生更改时,最佳方法是什么。

我试图使用SqlDependency来使我的缓存失效,但是这会迫使我在只有一位发生变化时重新载入非常多的数据。性能不太好。当使用SqlDependecy的应用程序在数据上改变某些内容时,它也会触发,因此一次更改会使缓存更新两次。

因为我从来没有开发过一定数量的缓存,所以我不知道如何继续下去。做这个的最好方式是什么?

+0

为什么单个位更改迫使您重新加载非常多的数据? – Paparazzi 2013-04-23 13:26:17

+0

嗯,也许我做错了什么,但是当我收到通知时,我不知道到底发生了什么变化,所以我不能重新加载更改后的数据。我需要将所有可能在SqlCommand下更改的内容进行重新表示。例如表'A'中的所有元素,其中fk ... = x。可以是相当多的数据。 – Patrick 2013-04-23 13:56:09

+0

了解,但仍然不会强制您重新加载所有数据。您可以读取读取数据并仅更新已更改的数据。或者你可以在SQL上实现一个触发器来写出更改,因此你只需要检查该表。 – Paparazzi 2013-04-23 14:38:50

回答

1

单个位仍然不会强制您重新加载所有数据。
您可以读取读取数据并只更新已更改的数据。

或者你可以在SQL上实现一个触发器来写出更改,所以你只需要检查该表。
如果多个客户端正在从触发器表中进行同步,那么可能会有另一个FK表,客户端可以指示他们拿起了什么。
每晚清理掉东西。

+0

你的答案明确地让我走了。我只是不确定是否应该使用触发器或SQL Server(2008 R2及更新版本)提供的“更改跟踪”。通过使用触发器的解决方案,我拥有更多的控制权,但必须为每个表执行此操作。或者是否有可能在一次触发中为所有表执行此操作? (我从来没有使用触发器) – Patrick 2013-04-25 07:14:52

+1

我建议两者。更改跟踪以通知。然后触发以确定哪些数据已更改。我不认为你可以有一个触发器的所有表,并怀疑这是最好的解决方案。当然你有一些没有被用户更新的表格。你不希望触发表触发。您可以将多个触发器写入同一个表。 – Paparazzi 2013-04-25 18:50:02

相关问题