NCache Polling-Based Dependency with OleDB
Note
This feature is only available in NCache Enterprise Edition.
NCache supports another database dependency called OleDb Dependency. It uses the polling mechanism to keep data synced with the database. The Polling-based Dependency works with large datasets.
This dependency lets you keep cache items synchronized with any of the databases. The SQL and Oracle dependencies explained earlier need SQL/Oracle databases to notify NCache about any change in the database. However, if the database does not provide the Change Notifications feature, NCache provides the facility to synchronize the cache with the 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, whereas, in polling-based dependency, NCache polls the database for any changes.
Notification Based Dependency only works with the database server, which supports data change notifications, i.e., via either the SQL Server(2005 or above) or Oracle (10g or later). Polling-Based Dependency also works with other versions of databases that do not provide data change notifications support. Also, Notification-Based Dependency is not as resource efficient as Polling-Based Dependency for large-scale usage.
Working on OleDB Dependency
In an OleDB Dependency, the user creates a table that NCache uses to synchronize the database with the cache-store. After that, triggers are created on the table for which notifications are required. These triggers are scripted to invalidate corresponding cache keys in this table in case of data change. DbCacheDependency - removes all the items from the cache that are expired.
Before using OleDB Dependency, set up the Environment for using OleDB Dependency.
For further details, please refer to the Setup OleDB Environment section in Administrator's Guide.
Prerequisites
- Set up environment for using OleDB Dependency.
- To learn about the standard prerequisites required to work with all NCache client side features please refer to the given page on Client Side API Prerequisites.
- For API details, refer to: ICache, CacheItem, Dependency, CreateOleDbDependency, DBDependencyFactory, Insert.
Add Data with OleDb Dependency
To add an item in the cache with OleDbDependency NCache provides the CreateOleDbCacheDependency
method. Using this method, the OleDB Dependency adds items to the cache.
The following code shows how to use polling-based dependency with the Oracle database. In this case, the database is configured to use polling-based dependency. The Insert method adds a new item with the dependency, and if this data already exists in the cache, it overwrites its properties.
Important
Note that the connection string you specify must contain the provider
parameter.
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
var cacheItem = new CacheItem(product);
cacheItem.Dependency = oledbDependency;
// Add cache item in the cache with OleDb Dependency
cache.Insert(key, cacheItem);
// For successful addition of item with OleDb Dependency
// Update the record in the database and check if key is present
}
catch (OperationFailedException ex)
{
// Exception can occur due to:
// Connection Failures
// Operation Timeout
// Operation performed during state transfer
}
catch (Exception ex)
{
// Any other generic exception like ArgumentNullException or ArgumentException
}
Note
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 on GitHub.
See Also
Key Dependency Types and Usage
Multi Cache Key Dependency
Data Expiration
Cache Data Dependency on External Source