Polling-based Database Dependency
NCache supports another database dependency called OleDb Dependency. It uses the polling mechanism to keep data synchronized with the database. This Polling-based Dependency works with large datasets.
This database 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 the 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.
The 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). Similarly, the Polling-based Dependency also works with other versions of databases that do not provide data change notification 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 Database 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. The DbCacheDependency removes all the items from the cache that are expired.
Before using the OleDB Dependency, Setup the OleDB Environment.
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.
// Precondition: Cache is already connected
// 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
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 is removing items from the cache, the next node in the cluster will again start the process.
Additional Resources
NCache provides a sample application for OleDB dependency on GitHub.
See Also
.NET: Alachisoft.NCache.Runtime.Dependencies namespace.
Java: com.alachisoft.ncache.runtime.dependencies namespace.