Sync Cache with OleDb
NCache supports another database dependency called OleDb Dependency. It uses the polling mechanism for keeping the data synced with the database. Polling Based Dependency is basically designed to work with large datasets.
Polling based dependency enables you to keep the cache items synchronized with any of the database. SQL and Oracle dependencies explained earlier need SQL/Oracle databases to notify NCache about any change in the database, however if database does not provide the Change Notifications feature, NCache provides the facility to synchronize cache with database using polling based dependency.
Important
In notification based dependencies like Oracle dependency, it is the responsibility of the database to notify changes to the cache, where as in polling based dependency, NCache polls the database for any changes.
Notification Based Dependency only works with the database server which provides support for data change notifications i.e. either with SQL Server(2005 or above) or Oracle (10g or later). Polling Based Dependency also works with other versions of databases which do not provide data change notifications support. Also, Notification Based Dependency is not as much resource efficient as Polling Based Dependency for large scale usage.
Working of OleDb Dependency
In OleDb Dependency, a table is created in the database by the user which is used by NCache to synchronize the database with the cache store. After that triggers are created on the table for which notification is required. These triggers will be scripted to invalidate corresponding cache keys in this table in case of data change. DbCacheDependency then removes all the items from the cache that are expired.
Before using OleDb Dependency, set up Environment for using OleDb Dependency.
In order to get complete detail please refer to Setup OleDb Environment section in Administrator's Guide.
Pre-Requisites for Using OleDb Dependency
- Set up environment for using OleDb Dependency.
- Include the following namespace in your application:
Alachisoft.NCache.Web.Caching
Alachisoft.NCache.Runtime
Alachisoft.NCache.Runtime.Dependencies
- The application must be connected to cache before performing the operation.
- Cache must be running.
- Make sure that the data being added is serializable.
- To ensure the operation is fail safe, it is recommended to handle any potential exceptions within your application, as explained in Handling Failures.
Add Data with OleDb Dependency
In order to add an item in the cache with OleDbDependency NCache provides with CreateOleDbCacheDependency method. Using this method an item item is added in the cache using OleDb Dependency.
The following code shows how to use polling based dependency with the Oracle
database. In this case the database has been already configured to use polling
based dependency. The Insert
method adds a new item with dependency and if the item already exists in the cache it overwrites its properties.
try
{
// Get product from database against given product ID
Product product = FetchProductFromDB(1001);
// Generate a unique cache key for this product
string key = $"Product:{product.ProductID}";
// Create a connection string to establish connection with the database
// Connection String is in [AppSettings] in App.config
string connectionString = ConfigurationManager.AppSettings["connectionstring"];
//Creating Polling based dependency
DBCacheDependency oledbDependency = DBDependencyFactory.CreateOleDbCacheDependency(connectionString, "1001:dbo.Products");
// Create a new cacheitem and add oledb dependency to it
CacheItem item = new CacheItem(product);
item.Dependency = oledbDependency;
// Add cache item in the cache with OleDb Dependency
cache.Insert(key, item);
// For successful addition of item with OleDb Dependency
// Update the record in the database and check if key is present
// This can be done by using
// cache.Contains()
// cache.Count
}
catch (OperationFailedException ex)
{
// Exception can occur due to:
// Connection Failures
// Operation performed during state transfer
// Operation Timeout
}
catch (Exception ex)
{
// Any other generic exception like ArgumentNullException or ArgumentException
}
Recommendation: To ensure the operation is fail safe, it is recommended to handle any potential exceptions within your application, as explained in Handling Failures.
Important
In a clustered cache, if a node crashes while it was removing items from the cache, the next node in the cluster will again start the process.
Additional Resources
NCache provides sample application for OleDb dependency at:
Shipped with NCache: %NCHOME%\samples\dotnet\Dependencies\PollingBasedDependency
See Also
Key Dependency
Multi Cache Key Dependency
Data Expiration
Sync Cache with External Source