1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Code Igniter User Guide</title>
<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript">
window.onload = function() {
myHeight = new fx.Height('nav', {duration: 400});
myHeight.hide();
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='Rick Ellis' />
<meta name='description' content='Code Igniter User Guide' />
</head>
<body>
<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle.jpg" width="153" height="44" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>Code Igniter User Guide Version 1.5.0</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Full Table of Contents</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->
<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://www.codeigniter.com/">Code Igniter Home</a> ›
<a href="../index.html">User Guide Home</a> ›
<a href="index.html">Database Library</a> ›
Database Caching Class
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="www.codeigniter.com/user_guide/" />Search User Guide <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" /> <input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->
<br clear="all" />
<!-- START CONTENT -->
<div id="content">
<h1>Database Caching Class</h1>
<p>The Database Caching Class contains functions that permit you to cache your queries.</p>
<p class="important"><strong>Important:</strong> This class is initialized automatically by the database driver
when caching is enabled. Do NOT load this class manually.
More info below...</p>
<h2>How Does Caching Work?</h2>
<p>When caching is enabled, anytime a "read" type query (SELECT) is run, the result object will
be serialized and stored in a text file on your server. Subsequent calls to that query will use the result from the cache file
rather then accessing your database. In other words, the first time a page is loaded a cache file will be written.
The next time the page is loaded the cached file will be used.</p>
<p>When a "write" type query (INSERT, UPDATE, etc.) is run , any cache files associated with the particular page being viewed
will be deleted automatically. If you need to update some data with every page load (user stats, for example) you will
need to manually disable caching just before running your "write" query, then re-enable it just
after. Otherwise, your site will be caught in a cycle of writing/deleting caches with every page view, creating more load then if you were not using
caching. More information on this will be found below.</p>
<p>Although caching will reduce your database load, dealing with cache files does generate more
up-front processing and file-system operations, as cache files are created and read. Instead of accessing your database for information
text files are used.</p>
<p>Whether you see a performance gain as a result of caching is dependant on many factors.
For example, if you have a highly optimized database under very little load, you probably won't see a performance boost.
If your database is under heavy use you probably will see an improved response, assuming your filesystem is not
overly taxed. In some clustered server environments caching may be detrimental since filesystem operations are so intense.
On single servers (particularly in shared enironments) caching will probably be beneficial. Unfortunately there is no
single answer to the question of whether you should cache your database. It really depends on your situation.</p>
<h2>Enabling Caching</h2>
<p>Enabling caching requires three steps:</p>
<ul>
<li>Creating a directory on your server where the cache files will be written.</li>
<li>Setting the path to your cache folder in your <dfn>application/config/database.php</dfn> file.</li>
<li>Enalbling the caching preference either in your database config file or manually in your controllers.</li>
</ul>
<h2>Caching Example</h2>
<p>Here is an example showing how you can selectively cache some queries and not others. Notice that the "write" type queries
are not.
<code>
<kbd>$this->db->cache_on();</kbd> // Turns on caching. We assume that you've set up a valid cache foler...
$query = $this->db->query("SELECT * FROM blog LIMIT 10);
foreach ($query->result() as $row)
{
echo '<h3>'.$row->title.'</h3>';
echo '<p>'>.$row->content.'</p>';
}
</code>
</div>
<!-- END CONTENT -->
<div id="footer">
<p>
Previous Topic: <a href="call_function.html">Custom Function Calls</a>
·
<a href="#top">Top of Page</a> ·
<a href="../index.html">User Guide Home</a> ·
Next Topic: <a href="export.html">Database Export Class</a>
<p>
<p><a href="http://www.codeigniter.com">Code Igniter</a> · Copyright © 2006 · <a href="http://www.pmachine.com">pMachine, Inc.</a></p>
</div>
</body>
</html>
|