Edit C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\7.0.1\help\userguide\salesforce.27.08.html
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <!-- MOTW-DISABLED saved from url=(0014)about:internet --> <title>Client-Side Caches</title> <link rel="StyleSheet" href="css/salesforce.css" type="text/css" media="all" /> <link rel="StyleSheet" href="css/webworks.css" type="text/css" media="all" /> <script type="text/javascript" language="JavaScript1.2" src="wwhdata/common/context.js"></script> <script type="text/javascript" language="JavaScript1.2" src="wwhdata/common/towwhdir.js"></script> <script type="text/javascript" language="JavaScript1.2" src="wwhdata/common/wwhpagef.js"></script> <script type="text/javascript" language="JavaScript1.2"> <!-- var WebWorksRootPath = ""; // --> </script> <script type="text/javascript" language="JavaScript1.2"> <!-- // Set reference to top level help frame // var WWHFrame = WWHGetWWHFrame("", true); // --> </script> <script type="text/javascript" language="JavaScript1.2" src="scripts/expand.js"></script> </head> <body class="" style="background-color: #FFFFEE;" onload="WWHUpdate();" onunload="WWHUnload();" onkeydown="WWHHandleKeyDown((document.all||document.getElementById||document.layers)?event:null);" onkeypress="WWHHandleKeyPress((document.all||document.getElementById||document.layers)?event:null);" onkeyup="WWHHandleKeyUp((document.all||document.getElementById||document.layers)?event:null);"> <br /> <div class="WebWorks_Breadcrumbs" style="text-align: left;"> <a class="WebWorks_Breadcrumb_Link" href="salesforce.27.01.html#1348636">21 The Salesforce Driver</a> : Client-Side Caches</div> <hr align="left" /> <blockquote> <div class="head_1"><a name="1348636">Client-Side Caches</a></div> <div class="Body"><a name="1348637">The Salesforce driver can implement a client-side data cache for improved performance. </a>Data is cached from the remote data source to the local machine on which the driver is located. </div> <div class="Body"><a name="1348638">The driver caches data on a per-table basis, as opposed to caching the result of a particular </a>query. Caching data on a table level allows the caches to be queried, filtered, and sorted in other queries. Once a cache is created, its use is transparent to the application. For example, if a cache is created on the Account table, then all subsequent queries that reference Account access the Account cache. Disabling or dropping the cache allows references to the Account table to access the remote data again. Because the use of the cache is transparent, no changes to the application are required to take advantage of the cache.</div> <div class="Body"><a name="1348639">You must specifically create a cache before it can be populated; caches are not created </a>automatically. After you have created a cache on a table, the cache will be populated as a result of the next operation on the table. For example, after creating a cache on Account, data is returned from the Salesforce data source and stored locally in the cache when you first execute the following statement:</div> <div class="syntax_first"><a name="1348640">SELECT ROWID, SYS_NAME FROM Account</a></div> <div class="Body"><a name="1348641">Any subsequent queries against the Account table return data from the cache, which </a>reduces response time. SQL queries can access both cached data and remote data (data stored in Salesforce that has not been assigned to a cache) in the same statement.</div> <div class="Body"><a name="1348642">The caches maintained by the Salesforce driver are write-through caches. This means that, </a>for any operation that modifies data in a table that is cached, the driver performs the operation on the remote data first and then updates the cache as much as possible.</div> <div class="Body"><a name="1348643">To create, modify, refresh, or delete client-side data caches, use the following SQL </a>statement extensions:</div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="1348644">Create Cache</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="1348645">Alter Cache</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="1348646">Refresh Cache</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="1348647">Drop Cache</a></div> </td> </tr> </table> </div> <div class="Body"><a name="1348650">See the following sections for overviews of each extension. Refer to </a><span class="Cross_ref_"><a href="javascript:WWHClickedPopup('reference', 'sqlsupport.12.01.html#24065', '');">Chapter 10 â??SQL Statements and Extensions for the Salesforce Driverâ??</a></span> in the <span class="Emphasis">DataDirect Connect Series for </span><span class="Emphasis">ODBC Reference</span> for descriptions of the syntax of these extensions.</div> <div class="head_2"><a name="1348653">Creating a Cache</a></div> <div class="Body"><a name="1348656">You create a cache using the Create Cache statement (refer to </a><span class="Cross_ref_"><a href="javascript:WWHClickedPopup('reference', 'sqlsupport.12.08.html#114255', '');">â??Create Cache (EXT)â??</a></span> in the <span class="Emphasis">DataDirect Connect Series for ODBC Reference</span>). A cache can be created on a single table or on a set of related tables. When creating a cache on a single table, you specify the name of the table to cache and can optionally specify a filter for the table. The filter determines whether the cache holds all of the data in the remote table or a subset of the data that matches the filter. You can also specify attributes for the Create Cache statement that determine:</div> <div class="list_bulleted_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_inner"><a name="1348658">Whether the cache data is held on disk or in memory</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="1348659">How often the cache data is refreshed</a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="1348660">Whether the cache is initially enabled </a></div> </td> </tr> </table> </div> <div class="list_bulleted_single_outer" style="margin-left: 0pt;"> <table border="0" cellspacing="0" cellpadding="0" summary=""> <tr style="vertical-align: baseline;"> <td> <div class="list_bulleted_single_inner" style="width: 18pt; white-space: nowrap;">â? </div> </td> <td width="100%"> <div class="list_bulleted_single_inner"><a name="1348661">Whether the driver checks to see if a refresh is needed at connect time </a></div> </td> </tr> </table> </div> <div class="Body"><a name="1348662">Creating a cache for a set of related tables is similar to creating a cache on a single table </a>except that a primary table and one or more referencing tables are specified. This is useful if you want to cache a subset of data for a table and also cache data related to that subset of data. For example, you might have three tables, Account, Contact, and Opportunity, where both a contact and an opportunity belong to a particular account. Using a relational cache, you could specify that accounts that have had activity in the past year be cached, as well as caching the opportunities and contacts for only those cached accounts.</div> <div class="head_2"><a name="1348663">Modifying a Cache Definition</a></div> <div class="Body"><a name="1348664">Once a cache has been created, you can modify the definition of the cache or set of related </a>caches with the Alter Cache statement (refer to <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('reference', 'sqlsupport.12.02.html#116567', '');">â??Alter Cache (EXT)â??</a></span> in the <span class="Emphasis">DataDirect </span><span class="Emphasis">Connect Series for ODBC Reference</span>). Only the attributes of the cache can be modified through the Alter Cache statement; the table or related set of tables cannot be changed and a single table cache cannot be changed to a relational cache. </div> <div class="Body"><a name="1348668">WARNING: Changing the attributes of a cache may cause the current data in the cache to </a>be discarded and refetched from the remote data source.</div> <div class="head_3"><a name="1348670">Disabling and Enabling a Cache</a></div> <div class="Body"><a name="1348671">When a cache is defined on a table, all fetch operations performed on that table access the </a>cache, essentially hiding the remote table from the application. At times, you may want an application to query the remote data instead of the cached data. For example, assume that a cache was created on Account with a filter set to cache accounts that have had activity in the past year. You may want to run a query to get information about an account that has not been active for two years. One alternative would be to drop the Account cache, run the query, and then recreate the cache on Account, but this can be problematic. First, you must recreate the cache and make sure it had the same attributes as before. Second, the data in the cache is discarded and needs to be refetched when the cache is recreated. Depending on the amount of cached data, this could take a significant amount of time. To address this type of issue, the Salesforce driver can temporarily disable a cache. When a cache is disabled, its definition and data are maintained. Any queries that reference a table with a disabled cache access the remote table. When you want to access cached data again, the cache can be enabled.</div> <div class="head_3"><a name="1348673"> </a>Refreshing Cache Data</div> <div class="Body"><a name="1348674">To prevent the data in a cache from becoming out of date, the driver must periodically </a>refresh the cache data with data from the remote data source. To minimize the amount of data that needs to be moved when a cache is refreshed, and therefore the time required to refresh it, the driver checks to see which records in the remote table have been added, modified, or deleted since the last time the cache was refreshed. The driver retrieves only data for added or modified records and removes only deleted records from the cache. You or the application can refresh the cache manually or the driver can refresh the cache automatically.</div> <div class="Body"><a name="1348675">You can refresh a cache manually at any time by using the Refresh Cache statement (refer </a>to <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('reference', 'sqlsupport.12.21.html#112844', '');">â??Refresh Cache (EXT)â??</a></span> in the <span class="Emphasis">DataDirect Connect Series for ODBC Reference</span>). The Refresh Cache statement can also be used to perform a Clean (complete) refresh in addition to the standard optimized refresh. A Clean refresh discards all of the data from the cache and repopulates it with data from the remote data source.</div> <div class="Body"><a name="1348679">The driver can refresh a cache automatically in one of two ways. When you create a cache, </a>one of the attributes that you set is the refresh interval for the cache. During each cache query, the driver checks to see whether the time elapsed since the last refresh exceeds the refresh interval for the cache. If it has, the driver refreshes the cache before satisfying the query.</div> <div class="Body"><a name="1348680">Update operations to a table that is cached can trigger the driver to refresh the cache </a>automatically. The caches maintained by the Salesforce driver are write-through caches. For any operation that modifies data in a table that is cached, the driver performs the operation on the remote data first and then updates the cache as much as possible. The driver may not be able to update the cache with all of the modifications because some of the modified data may have been generated by the remote data source. For example, if a row is inserted but a value for all columns in the row is not required, any default values generated by the remote data source for columns not specified in the Insert statement would not be set in the cache. Because the driver cannot reflect all of the changes made when a cached table is modified, it sets the cache state to dirty. When a cache state is dirty, the next query that attempts to fetch data from that cache causes the driver to refresh the cache before the fetch operation is performed. This allows the fetch to see the values populated by the remote data source.</div> <div class="Body"><a name="1348681">Automatically refreshing a dirty cache is not always desirable. For example, if an application </a>alternates fetches and inserts on a table, and the insert does not depend on any remote data source generated values, then the refresh between fetches is unnecessary. The <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('ODBC', 'salesforce.27.04.html#1243646', '');">Refresh Dirty Cache</a></span> connection option (see <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('ODBC', 'salesforce.27.04.html#917084', '');">â??Connection Option Descriptionsâ??</a></span>) controls whether the driver automatically refreshes a cache with a dirty state. The state of a cache can be viewed by selecting the STATUS column of the SYSTEM_CACHES catalog table. See <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('ODBC', 'salesforce.27.09.html#1348709', '');">â??SYSTEM_CACHES Catalog Tableâ??</a></span> for more information.</div> <div class="head_2"><a name="1348691">Dropping a Cache</a></div> <div class="Body"><a name="1348694">You can drop an existing cache using the Drop Cache statement (refer to </a><span class="Cross_ref_"><a href="javascript:WWHClickedPopup('reference', 'sqlsupport.12.14.html#112340', '');">â??Drop Cache (EXT)â??</a></span> in the <span class="Emphasis">DataDirect Connect Series for ODBC Reference</span>). If a cache is a relational cache, the Drop Cache statement drops the cache for the primary table as well as the caches for the related tables.</div> <div class="Body"><a name="1348696">NOTE: When a cache is dropped, all of the data in that cache is discarded. </a></div> <div class="head_2"><a name="1348697">Cache MetaData</a></div> <div class="Body"><a name="1348698">The Salesforce driver maintains information about the caches that have been created. The </a>driver provides two system tables to expose the cache information, the SYSTEM_CACHES table and the SYSTEM_CACHE_REFERENCES table.</div> <div class="Body"><a name="1348699">The SYSTEM_CACHES and SYSTEM_CACHE_REFERENCES system tables exist in the </a>INFORMATION_SCHEMA schema. See <span class="Cross_ref_"><a href="javascript:WWHClickedPopup('ODBC', 'salesforce.27.09.html#1348705', '');">â??Catalog Tablesâ??</a></span> for a complete description of the contents of these system tables.</div> <script type="text/javascript" language="JavaScript1.2"> <!-- // Clear related topics // WWHClearRelatedTopics(); document.writeln(WWHRelatedTopicsInlineHTML()); // --> </script> </blockquote> <script type="text/javascript" language="JavaScript1.2"> <!-- document.write(WWHRelatedTopicsDivTag() + WWHPopupDivTag() + WWHALinksDivTag()); // --> </script> </body> </html>
Ms-Dos/Windows
Unix
Write backup
jsp File Browser version 1.2 by
www.vonloesch.de