SQL 2008 CLR Trigger to update memory cache in ASP.NET application
Hello All,
I have a web page (ASP.NET) requesting constantly data from the server by querying db.
Problem is that there are lots of requests and db is heavily loaded by the queries.
So I was thinking about creating static list (some kind of cache) inside ASP.NET app. containing record from queried table.
All the requests would read directly from that cache.
Now I need a good way to update list after update is done on db. table.
I was thinking about CLR trigger with some remoting to ASP.NET app.
However it's quite complex (not even sure how to do it yet) maybe some of you has a better (easier) solution?
I depends what type of information you want to save in this "cache" and how often it needs is changed, and how fresj it needs to be
One generic option would be;
define each of your "cached" objects in DB as table with columns cacheID (unique), loadDate, updateDate, plus some other metadata, for example list of tables/columns it depends on
All updates in you database need update "updateDate" when one of the objects that define your cache is updated.
In your application, before you read data from cache you will to get cacheID.updateDate from database, compare it with date in application cache, and use data from memory or update cached object from DB if dates are different before you use it.
There are many variation depending on how often your update data and how fresh data your application needs. In this case you can just update cache on demand or by schedule.
0
kheim2008Author Commented:
I'm afraid that updates happens too often to query for the updates every time.
I think CLR trigger is the solution - my main question is what is the best way to "transfer" CLR trigger data into ASP.NET app.
If updates happens too often, your design can produce more load on database, then just running queries. In addition to that you need to worry about synchronization.
In other words you are trying to create copy of database inside your .NET application and updated this copy anytime database is updated.
One generic option would be;
define each of your "cached" objects in DB as table with columns cacheID (unique), loadDate, updateDate, plus some other metadata, for example list of tables/columns it depends on
All updates in you database need update "updateDate" when one of the objects that define your cache is updated.
In your application, before you read data from cache you will to get cacheID.updateDate from database, compare it with date in application cache, and use data from memory or update cached object from DB if dates are different before you use it.
There are many variation depending on how often your update data and how fresh data your application needs. In this case you can just update cache on demand or by schedule.