App Engine Python SDK version $VERSION
[gae.git] / docs / appengine / kb / unappliedwrites.html
blob42a12a5275616a519b3f3e8b2baa0643ddc8e423
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
30 <html>
31 <head>
32 <script type="text/javascript" language="JavaScript">
33 ORIGINAL_PAGE_PATH = "/appengine/kb/unappliedwrites.html";
34 </script>
37 <meta http-equiv="content-type" content="text/html; charset=utf-8">
38 <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
39 <title>Google App Engine Unapplied Writes FAQ - Google App Engine - Google Code</title>
40 <script type="text/javascript"><!--
41 (function(){function a(){this.t={};this.tick=function(c){this.t[c]=(new Date).getTime()};this.tick("start")}var b=new a;window.jstiming={Timer:a,load:b};if(window.external&&window.external.pageT)window.jstiming.pt=window.external.pageT;})();
43 var _tocPath_ = '/appengine/docs/_toc.ezt';
44 var codesite_token = null;
45 var logged_in_user_email = null;
46 //--></script>
47 <link href="../../css/codesite.pack.04102009.css" type="text/css" rel="stylesheet">
48 <script src="../../js/codesite_head.pack.04102009.js" type="text/javascript"></script>
49 <script type="text/javascript">CODESITE_CSITimer['load'].tick('bhs');</script>
50 <link rel="search" type="application/opensearchdescription+xml" title="Google Code" href="http://code.google.com/osd.xml">
52 <!--[if IE]><link rel="stylesheet" type="text/css" href="../../css/iehacks.css"><![endif]-->
54 <link href="../../css/semantic_headers.css" rel="stylesheet" type="text/css" />
55 <link href="../css/local_extensions.css" rel="stylesheet" type="text/css" />
56 <script src="../js/customtabs.js" type="text/javascript"></script>
57 <script src="../js/ui.tabs.js" type="text/javascript"></script>
58 </head>
60 <body class="gc-documentation">
64 <script type="text/javascript">
65 var _gaq = _gaq || [];
67 var cookiePath = '/appengine/';
68 if (cookiePath.lastIndexOf('.html') > cookiePath.lastIndexOf('/')) {
69 cookiePath = cookiePath.substring(0, cookiePath.lastIndexOf('/') + 1);
72 _gaq.push(
75 ['siteTracker._setAccount', 'UA-18071-1'],
76 ['siteTracker._setDomainName', 'code.google.com'],
77 ['siteTracker._trackPageview']
79 (function() {
80 var ga = document.createElement('script');
81 ga.type = 'text/javascript';
82 ga.async = true;
83 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
84 (document.getElementsByTagName('head')[0] ||
85 document.getElementsByTagName('body')[0]).appendChild(ga);
86 })();
87 </script>
90 <div id="gb">
91 <span>
93 <a id="lang-dropdown" href="http://code.google.com" onclick="return false;"><span style="text-decoration:underline">English</span> <span style="font-size:.75em;">&#9660;</span></a>
95 </span>
96 </div>
98 <div class="gbh" style="left:0px;"></div>
99 <div class="gbh" style="right:0px;"></div>
102 <div id="gc-container">
103 <a id="top"></a>
104 <div id="skipto">
105 <a href="#gc-pagecontent-anchor">Skip to page content</a>
106 <a href="#gc-toc-anchor">Skip to main navigation</a>
107 </div>
109 <div id="gc-header">
110 <div id="logo"><a href="http://code.google.com">
112 <img src="../../images/code_logo.gif" height="40" width="167" alt="Google Code" style="border:0;margin:3px 0 0 0;">
114 </a></div>
115 <div id="search">
116 <div id="searchForm">
117 <form id="cse" action="http://www.google.com/cse" accept-charset="utf-8" onsubmit="executeGSearch(document.getElementById('gsearchInput').value); return false;">
118 <noscript>
119 <input type="hidden" name="cref" value="http://code.google.com/cse/googlecode-context.xml">
120 </noscript>
121 <div id="gsc-search-box">
122 <input id="gsearchInput" type="text" name="q" maxlength="2048" class="gsc-input" autocomplete="off" title="Google Code Search" style="width:345px">
123 <div id="cs-searchresults" onclick="event.cancelBubble = true;"></div>
124 <input title="Search" id="gsearchButton" class="gsc-search-button" name="sa" value="Search" type="submit">
125 <div class="greytext">e.g. "templates" or "datastore"</div>
126 </div>
127 </form>
128 </div> <!-- end searchForm -->
129 </div> <!-- end search -->
134 </div> <!-- end gc-header -->
137 <div id="codesiteContent">
139 <a id="gc-topnav-anchor"></a>
140 <div id="gc-topnav">
141 <h1 style="padding:0 0 0 6px;">Google App Engine</h1>
142 <ul id="faq" class="gc-topnav-tabs">
144 <li id="home_link">
145 <a href="../index.html" title="Google App Engine home page">Home</a>
146 </li>
148 <li id="docs_link">
149 <a href="../docs/index.html" title="Official Google App Engine documentation">Docs</a>
150 </li>
152 <li id="faq_link">
153 <a href="index.html" class="selected" title="Answers to frequently asked questions about Google App Engine">FAQ</a>
154 </li>
156 <li id="articles_link">
157 <a href="../articles/index.html" title="Focused articles and tutorials for Google App Engine developers">Articles</a>
158 </li>
160 <li>
161 <a href="http://googleappengine.blogspot.com/" title="Official Google App Engine blog">Blog</a>
162 </li>
164 <li>
165 <a href="../community.html" title="Community home for Google App Engine">Community</a>
166 </li>
168 <li>
169 <a href="../terms.html" title="Google App Engine terms of service">Terms</a>
170 </li>
172 <li>
173 <a href="../downloads.html" title="Download Google App Engine">Download</a>
174 </li>
181 <li><g:plusone size="small" count="false" source="google:googlecode"></g:plusone>&nbsp;</li>
182 </ul>
183 </div> <!-- end gc-topnav -->
186 <div class="g-section g-tpl-170">
188 <a name="gc-toc-anchor"></a>
189 <div class="g-unit g-first" id="gc-toc">
190 <ul>
191 <li><a href="../downloads.html">Downloads</a></li>
192 <li><a href="../tools_tips.html">Tools and Tips</a></li>
193 <li><a href="../docs/glossary.html">Glossary</a><sup class="new">New!</sup></li>
194 <li><a href="https://appengine.google.com/">Admin Console</a></li>
195 <li><a href="http://code.google.com/status/appengine">System Status</a></li>
196 <li><a href="http://code.google.com/p/googleappengine/issues/list">Issue Tracker</a></li>
197 </ul>
198 <div class="line"></div>
199 <ul>
200 <li><h2>Getting Started</h2>
201 <ul>
202 <li><a href="../docs/whatisgoogleappengine.html">What Is Google App Engine?</a></li>
203 <li><a href="../docs/java/gettingstarted/index.html">Java</a>
204 <ul>
205 <li><a href="../docs/java/gettingstarted/introduction.html">Introduction</a></li>
206 <li><a href="../docs/java/gettingstarted/installing.html">Installing the Java SDK</a></li>
207 <li><a href="../docs/java/gettingstarted/creating.html">Creating a Project</a></li>
208 <li><a href="../docs/java/gettingstarted/usingusers.html">Using the Users Service</a></li>
209 <li><a href="../docs/java/gettingstarted/usingjsps.html">Using JSPs</a></li>
210 <li><a href="../docs/java/gettingstarted/usingdatastore.html">Using the Datastore</a></li>
211 <li><a href="../docs/java/gettingstarted/staticfiles.html">Using Static Files</a></li>
212 <li><a href="../docs/java/gettingstarted/uploading.html">Uploading Your Application</a></li>
213 <li><a href="http://googcloudlabs.appspot.com">Codelabs for Getting Started in Java</a></li>
215 </ul>
216 </li>
217 <li><a href="../docs/python/gettingstarted/index.html">Python 2.5</a>
218 <ul>
219 <li><a href="../docs/python/gettingstarted/introduction.html">Introduction</a></li>
220 <li><a href="../docs/python/gettingstarted/devenvironment.html">The Development Environment</a></li>
221 <li><a href="../docs/python/gettingstarted/helloworld.html">Hello, World!</a></li>
222 <li><a href="../docs/python/gettingstarted/usingwebapp.html">Using the webapp Framework</a></li>
223 <li><a href="../docs/python/gettingstarted/usingusers.html">Using the Users Service</a></li>
224 <li><a href="../docs/python/gettingstarted/handlingforms.html">Handling Forms With webapp</a></li>
225 <li><a href="../docs/python/gettingstarted/usingdatastore.html">Using the Datastore</a></li>
226 <li><a href="../docs/python/gettingstarted/templates.html">Using Templates</a></li>
227 <li><a href="../docs/python/gettingstarted/staticfiles.html">Using Static Files</a></li>
228 <li><a href="../docs/python/gettingstarted/uploading.html">Uploading Your Application</a></li>
230 </ul>
231 </li>
232 <li><a href="../docs/python/gettingstartedpython27/index.html">Python 2.7</a>
233 <ul>
234 <li><a href="../docs/python/gettingstartedpython27/introduction.html">Introduction</a></li>
235 <li><a href="../docs/python/gettingstartedpython27/devenvironment.html">The Development Environment</a></li>
236 <li><a href="../docs/python/gettingstartedpython27/helloworld.html">Hello, World!</a></li>
237 <li><a href="../docs/python/gettingstartedpython27/usingwebapp.html">Explaining the webapp2 Framework</a></li>
238 <li><a href="../docs/python/gettingstartedpython27/usingusers.html">Using the Users Service</a></li>
239 <li><a href="../docs/python/gettingstartedpython27/handlingforms.html">Handling Forms With webapp</a></li>
240 <li><a href="../docs/python/gettingstartedpython27/usingdatastore.html">Using the Datastore</a></li>
241 <li><a href="../docs/python/gettingstartedpython27/templates.html">Using Templates</a></li>
242 <li><a href="../docs/python/gettingstartedpython27/staticfiles.html">Using Static Files</a></li>
243 <li><a href="../docs/python/gettingstartedpython27/uploading.html">Uploading Your Application</a></li>
245 </ul>
246 </li>
247 <li><a href="../docs/go/gettingstarted/index.html">Go</a>
248 <ul>
249 <li><span class="exp-feat">Experimental!</span></li>
250 <li><a href="../docs/go/gettingstarted/introduction.html">Introduction</a></li>
251 <li><a href="../docs/go/gettingstarted/devenvironment.html">The Development Environment</a></li>
252 <li><a href="../docs/go/gettingstarted/helloworld.html">Hello, World!</a></li>
253 <li><a href="../docs/go/gettingstarted/usingusers.html">Using the Users Service</a></li>
254 <li><a href="../docs/go/gettingstarted/handlingforms.html">Handling Forms</a></li>
255 <li><a href="../docs/go/gettingstarted/usingdatastore.html">Using the Datastore</a></li>
256 <li><a href="../docs/go/gettingstarted/uploading.html">Uploading Your Application</a></li>
258 </ul>
259 </li>
260 </ul>
261 </li>
262 </ul>
263 <div class="line"></div>
264 <ul>
265 <li><h2>Java</h2>
266 <ul>
267 <li><a href="../docs/java/overview.html">Overview</a></li>
268 <li><a href="../docs/java/runtime.html">Servlet Environment</a></li>
269 <li><a href="../docs/java/backends/index.html">Backends</a>
270 <ul>
271 <li><a href="../docs/java/backends/overview.html">Overview</a></li>
272 <li><a href="../docs/java/javadoc/com/google/appengine/api/backends/package-summary.html">Javadoc Reference</a></li>
275 </ul>
276 </li>
277 <li><a href="../docs/java/datastore/index.html">Storing Data</a>
278 <ul>
279 <li><a href="../docs/java/datastore/overview.html">Overview</a></li>
280 <li><a href="../docs/java/datastore/entities.html">Entities</a></li>
281 <li><a href="../docs/java/datastore/queries.html">Queries</a></li>
282 <li><a href="../docs/java/datastore/transactions.html">Transactions</a></li>
283 <li><a href="../docs/java/datastore/hr/index.html">Choosing a Datastore</a></li>
284 <li><a href="../docs/java/datastore/hr/overview.html">Using the High Replication Datastore</a></li>
285 <li><a href="../docs/java/datastore/metadataqueries.html">Metadata Queries</a></li>
286 <li><a href="../docs/java/datastore/stats.html">Statistics</a></li>
287 <li><a href="../docs/java/datastore/async.html">Async API</a></li>
288 <li><a href="../docs/java/datastore/callbacks.html">Callbacks</a></li>
289 <li><a href="../docs/java/datastore/jdo/index.html">JDO</a>
290 <ul>
291 <li><a href="../docs/java/datastore/jdo/overview.html">Overview</a></li>
292 <li><a href="../docs/java/datastore/jdo/dataclasses.html">Defining Data Classes with JDO</a></li>
293 <li><a href="../docs/java/datastore/jdo/creatinggettinganddeletingdata.html">Creating, Getting, and Deleting Data in JDO</a></li>
294 <li><a href="../docs/java/datastore/jdo/relationships.html">Entity Relationships in JDO</a></li>
295 <li><a href="../docs/java/datastore/jdo/queries.html">Queries in JDO</a></li>
297 </ul>
298 </li>
299 <li><a href="../docs/java/datastore/jpa/index.html">JPA</a>
300 <ul>
301 <li><a href="../docs/java/datastore/jpa/overview.html">Overview</a></li>
303 </ul>
304 </li>
305 <li><a href="../docs/java/javadoc/com/google/appengine/api/datastore/package-summary.html">Javadoc Reference</a></li>
307 </ul>
308 </li>
309 <li><a href="../docs/java/apis.html">Services</a>
310 <ul>
311 <li><a href="../docs/java/appidentity/index.html">App Identity</a>
312 <ul>
313 <li><a href="../docs/java/appidentity/overview.html">Overview</a></li>
315 <li><a href="../docs/java/javadoc/com/google/appengine/api/appidentity/package-summary.html">Low-level API</a></li>
317 </ul>
318 </li>
319 <li><a href="../docs/java/blobstore/index.html">Blobstore</a>
320 <ul>
321 <li><a href="../docs/java/blobstore/overview.html">Overview</a></li>
322 <li><span class="tlw-title tlw-expanded">Reference</span>
323 <ul>
324 <li><a href="../docs/java/javadoc/com/google/appengine/api/blobstore/package-summary.html">API Reference</a></li>
325 </ul>
326 </li>
328 </ul>
329 </li>
330 <li><a href="../docs/java/googlestorage/index.html">Google Cloud Storage</a>
331 <ul>
332 <li><a href="../docs/java/googlestorage/overview.html">Overview</a></li>
333 <li><a href="../docs/java/javadoc/com/google/appengine/api/files/package-summary.html">API Reference</a></li>
334 </li>
337 </ul>
338 </li>
339 <li><a href="../docs/java/capabilities/index.html">Capabilities</a>
340 <ul>
341 <li><a href="../docs/java/capabilities/overview.html">Overview</a></li>
342 <li><a href="../docs/java/javadoc/com/google/appengine/api/capabilities/package-summary.html">Javadoc Reference</a></li>
344 </ul>
345 </li>
346 <li><a href="../docs/java/conversion/index.html">Conversion</a>
347 <ul>
348 <li><a href="../docs/java/conversion/overview.html">Overview</a></li>
349 <li><a href="../docs/java/javadoc/com/google/appengine/api/conversion/package-summary.html">Javadoc Reference</a></li>
351 </ul>
352 </li>
353 <li><a href="../docs/java/channel/index.html">Channel</a>
354 <ul>
355 <li><a href="../docs/java/channel/overview.html">Overview</a></li>
356 <li><a href="../docs/java/javadoc/com/google/appengine/api/channel/package-summary.html">Javadoc Reference</a></li>
357 <li><a href="../docs/java/channel/javascript.html">JavaScript Reference</a></li>
359 </ul>
360 </li>
361 <li><a href="../docs/java/images/index.html">Images</a>
362 <ul>
363 <li><a href="../docs/java/images/overview.html">Overview</a></li>
364 <li><a href="../docs/java/javadoc/com/google/appengine/api/images/package-summary.html">API Reference</a></li>
366 </ul>
367 </li>
368 <li><a href="../docs/java/mail/index.html">Mail</a>
369 <ul>
370 <li><a href="../docs/java/mail/overview.html">Overview</a></li>
371 <li><a href="../docs/java/mail/usingjavamail.html">Using JavaMail to Send Mail</a></li>
372 <li><a href="../docs/java/mail/receiving.html">Receiving Mail</a></li>
373 <li><a href="../docs/java/javadoc/com/google/appengine/api/mail/package-summary.html">Low-level API</a></li>
375 </ul>
376 </li>
377 <li><a href="../docs/java/memcache/index.html">Memcache</a>
378 <ul>
379 <li><a href="../docs/java/memcache/overview.html">Overview</a></li>
380 <li><a href="../docs/java/memcache/usingjcache.html">Using JCache</a></li>
381 <li><a href="../docs/java/javadoc/com/google/appengine/api/memcache/package-summary.html">Low-level API</a></li>
383 </ul>
384 </li>
385 <li><a href="../docs/java/multitenancy/index.html">Multitenancy</a>
386 <ul>
387 <li><a href="../docs/java/multitenancy/overview.html">Overview</a></li>
388 <li><a href="../docs/java/multitenancy/multitenancy.html">Multitenancy with Namespaces</a></li>
389 <li><a href="../docs/java/multitenancy/namespaces.html">Other Uses for Namespaces</a></li>
390 <li><a href="../docs/java/javadoc/com/google/appengine/api/NamespaceManager.html">API Reference</a></li>
392 </ul>
393 </li>
394 <li><a href="../docs/java/oauth/index.html">OAuth</a>
395 <ul>
396 <li><a href="../docs/java/oauth/overview.html">Overview</a></li>
397 <li><a href="../docs/java/javadoc/com/google/appengine/api/oauth/package-summary.html">API Reference</a></li>
400 </ul>
401 </li>
402 <li><a href="../docs/java/prospectivesearch/index.html">Prospective Search</a>
403 <ul>
404 <li><a href="../docs/java/prospectivesearch/overview.html">Overview</a></li>
405 <li><a href="../docs/java/javadoc/com/google/appengine/api/prospectivesearch/package-summary.html">Javadoc Reference</a></li>
407 </ul>
408 </li>
409 </li>
410 <li><a href="../docs/java/taskqueue/index.html">Task Queues</a>
411 <ul>
412 <li><a href="../docs/java/taskqueue/overview.html">Overview</a></li>
413 <li><a href="../docs/java/taskqueue/overview-push.html">Using Push Queues</a></li>
414 <li><a href="../docs/java/taskqueue/overview-pull.html">Using Pull Queues</a><sup class="new">New!</sup></li>
415 <li><a href="../docs/java/javadoc/com/google/appengine/api/taskqueue/package-summary.html">Javadoc Reference</a></li>
416 <li><a href="../docs/java/taskqueue/rest.html">REST reference</a> <span class="exp-feat">(Experimental)</span></li>
417 </ul>
418 </li>
419 <li><a href="../docs/java/urlfetch/index.html">URL Fetch</a>
420 <ul>
421 <li><a href="../docs/java/urlfetch/overview.html">Overview</a></li>
422 <li><a href="../docs/java/urlfetch/usingjavanet.html">Using java.net</a></li>
423 <li><a href="../docs/java/javadoc/com/google/appengine/api/urlfetch/package-summary.html">Low-level API</a></li>
425 </ul>
426 </li>
427 <li><a href="../docs/java/users/index.html">Users</a>
428 <ul>
429 <li><a href="../docs/java/users/overview.html">Overview</a></li>
430 <li><a href="../docs/java/javadoc/com/google/appengine/api/users/package-summary.html">API Reference</a></li>
432 </ul>
433 </li>
434 <li><a href="../docs/java/xmpp/index.html">XMPP</a>
435 <ul>
436 <li><a href="../docs/java/xmpp/overview.html">Overview</a></li>
437 <li><a href="../docs/java/javadoc/com/google/appengine/api/xmpp/package-summary.html">API Reference</a></li>
439 </ul>
440 </li>
441 </ul>
442 </li>
443 <li><a href="../docs/java/javadoc/index.html">Services Javadoc</a></li>
444 <li><a href="../docs/java/jrewhitelist.html">JRE Class White List</a></li>
445 <li><a href="../docs/java/config/index.html">Configuration</a>
446 <ul>
447 <li><a href="../docs/java/config/webxml.html">Deployment Descriptor</a></li>
448 <li><a href="../docs/java/config/appconfig.html">App Config</a></li>
449 <li><a href="../docs/java/config/backends.html">Backends Config</a></li>
450 <li><a href="../docs/java/config/indexconfig.html">Index Config</a></li>
451 <li><a href="../docs/java/config/cron.html">Scheduled Tasks</a></li>
452 <li><a href="../docs/java/config/queue.html">Task Queue Config</a></li>
453 <li><a href="../docs/java/config/dos.html">DoS Protection Config</a></li>
455 </ul>
456 </li>
457 <li><a href="../docs/java/configyaml/index.html">YAML Configuration</a>
458 <ul>
459 <li><a href="../docs/java/configyaml/appconfig_yaml.html">YAML App Config</a></li>
460 <li><a href="../docs/java/configyaml/backends.html">Backends Config</a></li>
461 <li><a href="../docs/java/configyaml/indexconfig.html">Index Config</a></li>
462 <li><a href="../docs/java/configyaml/cron.html">Scheduled Tasks</a></li>
463 <li><a href="../docs/java/configyaml/queue.html">Task Queue Config</a></li>
464 <li><a href="../docs/java/configyaml/dos.html">DoS Protection Config</a></li>
466 </ul>
467 </li>
468 <li><a href="../docs/java/tools/index.html">Tools</a>
469 <ul>
470 <li><a href="../docs/java/tools/devserver.html">Development Server</a></li>
471 <li><a href="../docs/java/tools/uploadinganapp.html">Uploading and Managing an App</a></li>
472 <li><a href="../docs/java/tools/eclipse.html">Google Plugin for Eclipse</a></li>
473 <li><a href="../docs/java/tools/ant.html">Using Apache Ant</a></li>
474 <li><a href="../docs/java/tools/capabilities.html">Capabilities Service Test Configuration</a>
475 <li><a href="../docs/java/tools/localunittesting.html">Local Unit Testing</a>
476 <ul>
477 <li><a href="../docs/java/tools/localunittesting/javadoc/index.html">Testing Javadoc</a></li>
478 </ul>
479 </li>
480 <li><a href="../docs/java/tools/appstats.html">Appstats</a></li>
481 <li><a href="../docs/java/tools/remoteapi.html">Remote API</a></li>
483 </ul>
484 </li>
485 <li><a href="../docs/java/howto/index.html">How-To</a>
486 <ul>
487 <li><a href="../docs/java/howto/maintenance.html">Handling Scheduled Maintenance Periods</a></li>
489 </ul>
490 </li>
492 </ul>
493 </li>
494 </ul>
495 <div class="line"></div>
496 <ul>
497 <li><h2>Python</h2>
498 <ul>
499 <li><a href="../docs/python/overview.html">Overview</a></li>
500 <li><a href="../docs/python/runtime.html">Runtime Environment</a></li>
501 <li><a href="../docs/python/python27/index.html">Python 2.7</a>
502 <ul>
503 <li><a href="../docs/python/python27/newin27.html">What's New in Python 2.7</a></li>
504 <li><a href="../docs/python/python27/using27.html">Using Python 2.7</a></li>
506 </ul>
507 </li>
508 <li><a href="../docs/python/backends/index.html">Backends</a>
509 <ul>
510 <li><a href="../docs/python/backends/overview.html">Overview</a></li>
511 <li><span class="tlw-title tlw-expanded">Reference</span>
512 <ul>
513 <li><a href="../docs/python/backends/functions.html">Backends API Functions</a></li>
514 <li><a href="../docs/python/backends/exceptions.html">Backends API Exceptions</a></li>
515 <li><a href="../docs/python/backends/logserviceapi.html">LogService API</a></li>
516 <li><a href="../docs/python/backends/applog.html">AppLog Class</a></li>
517 <li><a href="../docs/python/backends/requestlog.html">RequestLog Class</a></li>
518 <li><a href="../docs/python/backends/runtimeapi.html">Runtime API</a></li>
519 </ul>
520 </li>
522 </ul>
523 </li>
524 <li><a href="../docs/python/datastore/index.html">Storing Data</a>
525 <ul>
526 <li><a href="../docs/python/datastore/overview.html">Datastore Overview</a></li>
527 <li><a href="../docs/python/datastore/entities.html">Entities</a></li>
528 <li><a href="../docs/python/datastore/queries.html">Queries</a></li>
529 <li><a href="../docs/python/datastore/transactions.html">Transactions</a></li>
530 <li><a href="../docs/python/datastore/datamodeling.html">Data Modeling</a></li>
531 <li><a href="../docs/python/datastore/gqlreference.html">GQL Reference</a></li>
532 <li><a href="../docs/python/datastore/hr/index.html">Choosing a Datastore</a></li>
533 <li><a href="../docs/python/datastore/hr/overview.html">Using the High Replication Datastore</a></li>
534 <li><a href="../docs/python/datastore/metadataqueries.html">Metadata Queries</a></li>
535 <li><a href="../docs/python/datastore/stats.html">Statistics</a></li>
536 <li><a href="../docs/python/datastore/async.html">Async API</a></li>
537 <li><span class="tlw-title tlw-expanded">Reference</span>
538 <ul>
539 <li><a href="../docs/python/datastore/typesandpropertyclasses.html">Types and Property Classes</a></li>
540 <li><a href="../docs/python/datastore/gqlreference.html">GQL Reference</a></li>
541 <li><a href="../docs/python/datastore/modelclass.html">Model</a></li>
542 <li><a href="../docs/python/datastore/expandoclass.html">Expando</a></li>
543 <li><a href="../docs/python/datastore/polymodelclass.html">PolyModel</a></li>
544 <li><a href="../docs/python/datastore/propertyclass.html">Property</a></li>
545 <li><a href="../docs/python/datastore/queryclass.html">Query</a></li>
546 <li><a href="../docs/python/datastore/gqlqueryclass.html">GqlQuery</a></li>
547 <li><a href="../docs/python/datastore/metadataqueryclass.html">Metadata Query</a></li>
548 <li><a href="../docs/python/datastore/keyclass.html">Key</a></li>
549 <li><a href="../docs/python/datastore/functions.html">Functions</a></li>
550 <li><a href="../docs/python/datastore/exceptions.html">Exceptions</a></li>
551 </ul>
552 </li>
554 </ul>
555 </li>
556 <li><a href="../docs/python/dataprocessing/index.html">Data Processing</a>
557 <ul>
558 <li><a href="../docs/python/dataprocessing/overview.html">Overview</a></li>
559 <li><a href="../docs/python/dataprocessing/helloworld.html">Hello World</a></li>
560 <li><span class="tlw-title tlw-expanded">Reference</span>
561 <ul>
562 <li><a href="../docs/python/dataprocessing/mapreducepipelineclass.html">Mapreduce Pipline</a></li>
563 <li><a href="../docs/python/dataprocessing/readers_writers.html">Standard Input Readers and Output Writers</a></li>
564 </ul>
565 </li>
567 </ul>
568 </li>
569 <li><a href="../docs/python/apis.html">Services</a>
570 <ul>
571 <li><a href="../docs/python/appidentity/index.html">App Identity</a>
572 <ul>
573 <li><a href="../docs/python/appidentity/overview.html">Overview</a></li>
574 <li><span class="tlw-title tlw-expanded">Reference</span>
575 <ul>
576 <li><a href="../docs/python/appidentity/functions.html">Functions</a></li>
577 <li><a href="../docs/python/appidentity/exceptions.html">Exceptions</a></li>
578 </ul>
579 </li>
581 </ul>
582 </li>
583 <li><a href="../docs/python/blobstore/index.html">Blobstore</a>
584 <ul>
585 <li><a href="../docs/python/blobstore/overview.html">Overview</a></li>
586 <li><span class="tlw-title tlw-expanded">Reference</span>
587 <ul>
588 <li><a href="../docs/python/blobstore/blobinfoclass.html">BlobInfo</a></li>
589 <li><a href="../docs/python/blobstore/blobkeyclass.html">BlobKey</a></li>
590 <li><a href="../docs/python/blobstore/blobreaderclass.html">BlobReader</a></li>
591 <li><a href="../docs/python/blobstore/functions.html">Functions</a></li>
592 <li><a href="../docs/python/blobstore/exceptions.html">Exceptions</a></li>
593 </ul>
594 </li>
596 </ul>
597 </li>
598 <li><a href="../docs/python/capabilities/index.html">Capabilities</a>
599 <ul>
600 <li><a href="../docs/python/capabilities/overview.html">Overview</a></li>
601 <li><span class="tlw-title tlw-expanded">Reference</span>
602 <ul>
603 <li><a href="../docs/python/capabilities/capabilitysetclass.html">CapabilitySet</a></li>
604 <li><a href="../docs/python/capabilities/exceptions.html">Exceptions</a></li>
605 </ul>
606 </li>
608 </ul>
609 </li>
610 <li><a href="../docs/python/conversion/index.html">Conversion</a>
611 <ul>
612 <li><a href="../docs/python/conversion/overview.html">Overview</a></li>
613 <li><span class="tlw-title tlw-expanded">Reference</span>
614 <ul>
615 <li><a href="../docs/python/conversion/conversionclass.html">Conversion Class</a></li>
616 <li><a href="../docs/python/conversion/propertyclasses.html">Property Classes</a></li>
617 <li><a href="../docs/python/conversion/functions.html">Functions</a></li>
618 <li><a href="../docs/python/conversion/exceptions.html">Exceptions</a></li>
619 </ul>
620 </li>
622 </ul>
623 </li>
624 <li><a href="../docs/python/channel/index.html">Channel</a>
625 <ul>
626 <li><a href="../docs/python/channel/overview.html">Overview</a></li>
627 <li><span class="tlw-title tlw-expanded">Reference</span>
628 <ul>
629 <li><a href="../docs/python/channel/functions.html">Functions</a></li>
630 <li><a href="../docs/python/channel/exceptions.html">Exceptions</a></li>
631 <li><a href="../docs/python/channel/javascript.html">Client Javascript Reference</a></li>
632 </ul>
633 </li>
635 </ul>
636 </li>
637 <li><a href="../docs/python/images/index.html">Images</a>
638 <ul>
639 <li><a href="../docs/python/images/overview.html">Overview</a></li>
640 <li><a href="../docs/python/images/installingPIL.html">Installing PIL</a></li>
641 <li><a href="../docs/python/images/usingimages.html">Using the Images API</a></li>
642 <li><span class="tlw-title tlw-expanded">Reference</span>
643 <ul>
644 <li><a href="../docs/python/images/imageclass.html">Image</a></li>
645 <li><a href="../docs/python/images/functions.html">Functions</a></li>
646 <li><a href="../docs/python/images/exceptions.html">Exceptions</a></li>
647 </ul>
648 </li>
650 </ul>
651 </li>
652 <li><a href="../docs/python/mail/index.html">Mail</a>
653 <ul>
654 <li><a href="../docs/python/mail/overview.html">Overview</a></li>
655 <li><a href="../docs/python/mail/sendingmail.html">Sending Mail</a></li>
656 <li><a href="../docs/python/mail/receivingmail.html">Receiving Mail</a></li>
657 <li><a href="../docs/python/mail/attachments.html">Attachments</a></li>
658 <li><a href="../docs/python/mail/headers.html">Headers</a></li>
659 <li><span class="tlw-title tlw-expanded">Reference</span>
660 <ul>
661 <li><a href="../docs/python/mail/emailmessageclass.html">EmailMessage</a></li>
662 <li><a href="../docs/python/mail/emailmessagefields.html">Message Fields</a></li>
663 <li><a href="../docs/python/mail/functions.html">Functions</a></li>
664 <li><a href="../docs/python/mail/exceptions.html">Exceptions</a></li>
665 </ul>
666 </li>
668 </ul>
669 </li>
670 <li><a href="../docs/python/memcache/index.html">Memcache</a>
671 <ul>
672 <li><a href="../docs/python/memcache/overview.html">Overview</a></li>
673 <li><a href="../docs/python/memcache/usingmemcache.html">Using Memcache</a></li>
674 <li><span class="tlw-title tlw-expanded">Reference</span>
675 <ul>
676 <li><a href="../docs/python/memcache/clientclass.html">Client</a></li>
677 <li><a href="../docs/python/memcache/functions.html">Functions</a></li>
678 </ul>
679 </li>
681 </ul>
682 </li>
683 <li><a href="../docs/python/multitenancy/index.html">Multitenancy</a>
684 <ul>
685 <li><a href="../docs/python/multitenancy/overview.html">Overview</a></li>
686 <li><a href="../docs/python/multitenancy/multitenancy.html">Multitenancy with Namespaces</a></li>
687 <li><a href="../docs/python/multitenancy/namespaces.html">Other Uses for Namespaces</a></li>
688 <li>Reference
689 <ul>
690 <li><a href="../docs/python/multitenancy/functions.html">Functions</a></li>
691 <li><a href="../docs/python/multitenancy/exceptions.html">Exceptions</a></li>
692 </ul>
693 </li>
695 </ul>
696 </li>
697 <li><a href="../docs/python/oauth/index.html">OAuth</a>
698 <ul>
699 <li><a href="../docs/python/oauth/overview.html">Overview</a></li>
700 <li><span class="tlw-title tlw-expanded">Reference</span>
701 <ul>
702 <li><a href="../docs/python/oauth/functions.html">Functions</a></li>
703 <li><a href="../docs/python/oauth/exceptions.html">Exceptions</a></li>
704 </ul>
705 </li>
707 </ul>
708 </li>
709 <li><a href="../docs/python/prospectivesearch/index.html">Prospective Search</a>
710 <ul>
711 <li><a href="../docs/python/prospectivesearch/overview.html">Overview</a></li>
712 <li><span class="tlw-title tlw-expanded">Reference</span>
713 <ul>
714 <li><a href="../docs/python/prospectivesearch/functions.html">Functions</a></li>
715 <li><a href="../docs/python/prospectivesearch/exceptions.html">Exceptions</a></li>
716 </ul>
717 </li>
719 </ul>
720 </li>
721 <li><a href="../docs/python/googlestorage/index.html">Google Cloud Storage</a>
722 <ul>
723 <li><a href="../docs/python/googlestorage/overview.html">Overview</a></li>
724 <li><a href="../docs/python/googlestorage/functions.html">Functions</a></li>
725 <li><a href="../docs/python/googlestorage/exceptions.html">Exceptions</a></li>
726 </li>
729 </ul>
730 </li>
731 <li><a href="../docs/python/taskqueue/index.html">Task Queues</a>
732 <ul>
733 <li><a href="../docs/python/taskqueue/overview.html">Overview</a></li>
734 <li><a href="../docs/python/taskqueue/overview-push.html">Using Push Queues</a></li>
735 <li><a href="../docs/python/taskqueue/overview-pull.html">Using Pull Queues</a><sup class="new">New!</sup></li>
736 <li><span class="tlw-title tlw-expanded">Reference</span>
737 <ul>
738 <li><a href="../docs/python/taskqueue/tasks.html">Task Class</a></li>
739 <li><a href="../docs/python/taskqueue/taskretryoptions.html">TaskRetryOptions Class</a></li>
740 <li><a href="../docs/python/taskqueue/queues.html">Queue Class</a></li>
741 <li><a href="../docs/python/taskqueue/rest.html">REST</a> <span class="exp-feat">(Experimental)</span></li>
742 <li><a href="../docs/python/taskqueue/functions.html">Functions</a></li>
743 <li><a href="../docs/python/taskqueue/exceptions.html">Exceptions</a></li>
744 </ul>
745 </li>
747 </ul>
748 </li>
749 <li><a href="../docs/python/urlfetch/index.html">URL Fetch</a>
750 <ul>
751 <li><a href="../docs/python/urlfetch/overview.html">Overview</a></li>
752 <li><span class="tlw-title tlw-expanded">Reference</span>
753 <ul>
754 <li><a href="../docs/python/urlfetch/fetchfunction.html">The fetch Function</a></li>
755 <li><a href="../docs/python/urlfetch/asynchronousrequests.html">Asynchronous Requests</a></li>
756 <li><a href="../docs/python/urlfetch/responseobjects.html">Response Objects</a></li>
757 <li><a href="../docs/python/urlfetch/exceptions.html">Exceptions</a></li>
758 </ul>
759 </li>
761 </ul>
762 </li>
763 <li><a href="../docs/python/users/index.html">Users</a>
764 <ul>
765 <li><a href="../docs/python/users/overview.html">Overview</a></li>
766 <li><a href="../docs/python/users/userobjects.html">User Objects</a></li>
767 <li><a href="../docs/python/users/loginurls.html">Login URLs</a></li>
768 <li><a href="../docs/python/users/adminusers.html">Admin Users</a></li>
770 <li><span class="tlw-title tlw-expanded">Reference</span>
771 <ul>
772 <li><a href="../docs/python/users/userclass.html">User</a></li>
773 <li><a href="../docs/python/users/functions.html">Functions</a></li>
774 <li><a href="../docs/python/users/exceptions.html">Exceptions</a></li>
775 </ul>
776 </li>
778 </ul>
779 </li>
780 <li><a href="../docs/python/xmpp/index.html">XMPP</a>
781 <ul>
782 <li><a href="../docs/python/xmpp/overview.html">Overview</a></li>
783 <li><span class="tlw-title tlw-expanded">Reference</span>
784 <ul>
785 <li><a href="../docs/python/xmpp/functions.html">Functions</a></li>
786 <li><a href="../docs/python/xmpp/messageclass.html">Message</a></li>
787 <li><a href="../docs/python/xmpp/exceptions.html">Exceptions</a></li>
788 </ul>
789 </li>
791 </ul>
792 </li>
793 </ul>
794 </li>
795 <li><a href="../docs/python/config/index.html">Configuration</a>
796 <ul>
797 <li><a href="../docs/python/config/appconfig.html">App Config</a></li>
798 <li><a href="../docs/python/config/backends.html">Backends Config</a></li>
799 <li><a href="../docs/python/config/indexconfig.html">Index Config</a></li>
800 <li><a href="../docs/python/config/cron.html">Scheduled Tasks</a></li>
801 <li><a href="../docs/python/config/queue.html">Task Queue Config</a></li>
802 <li><a href="../docs/python/config/dos.html">DoS Protection Config</a></li>
804 </ul>
805 </li>
806 <li><span class="tlw-title"><a href="../docs/python/tools/index.html">Tools</a></span>
807 <ul>
808 <li><a href="../docs/python/tools/devserver.html">Development Server</a></li>
809 <li><a href="../docs/python/tools/uploadinganapp.html">Uploading and Managing an App</a></li>
810 <li><a href="../docs/python/tools/uploadingdata.html">Uploading and Downloading Data</a></li>
811 <li><span class="tlw-title"><a href="../docs/python/tools/protorpc/index.html">ProtoRPC</a></span>
812 <ul>
813 <li><a href="../docs/python/tools/protorpc/overview.html">Overview</a></li>
814 <li><a href="../docs/python/tools/protorpc/definition-functions.html">Definition Module</a></li>
815 <li>Descriptor Module
816 <ul>
817 <li><a href="../docs/python/tools/protorpc/descriptor/descriptorlibrary.html">DescriptorLibrary Functions</a></li>
818 <li><a href="../docs/python/tools/protorpc/descriptor/functions.html">Functions</a></li>
820 </ul>
821 </li>
822 <li>Messages Module
823 <ul>
824 <li><a href="../docs/python/tools/protorpc/messages/enumclass.html">Enum</a></li>
825 <li><a href="../docs/python/tools/protorpc/messages/enumfieldclass.html">EnumField</a></li>
826 <li><a href="../docs/python/tools/protorpc/messages/fieldclass.html">Field</a></li>
827 <li><a href="../docs/python/tools/protorpc/messages/fieldclasses.html">Message Field Classes</a></li>
828 <li><a href="../docs/python/tools/protorpc/messages/messageclass.html">Message</a></li>
829 <li><a href="../docs/python/tools/protorpc/messages/messagefieldclass.html">MessageField</a></li>
830 <li><a href="../docs/python/tools/protorpc/messages/variantclass.html">Variant</a></li>
831 <li><a href="../docs/python/tools/protorpc/messages/functions.html">Functions</a></li>
832 <li><a href="../docs/python/tools/protorpc/messages/exceptions.html">Exceptions</a></li>
833 </ul>
834 </li>
835 <li>Remote Service Library
836 <ul>
837 <li><a href="../docs/python/tools/protorpc/remote/index.html">Overview</a></li>
838 <li><a href="../docs/python/tools/protorpc/remote/httprequeststateclass.html">HttpRequestState Class</a></li>
839 <li><a href="../docs/python/tools/protorpc/remote/requeststateclass.html">RequestState Class</a></li>
840 <li><a href="../docs/python/tools/protorpc/remote/rpcstatusclass.html">RpcStatus Class</a></li>
841 <li><a href="../docs/python/tools/protorpc/remote/serviceclass.html">Service Class</a></li>
842 <li><a href="../docs/python/tools/protorpc/remote/functions.html">Functions</a></li>
843 <li><a href="../docs/python/tools/protorpc/remote/exceptions.html">Exceptions</a></li>
845 </ul>
846 </li>
847 <li>Transport Library
848 <ul>
849 <li><a href="../docs/python/tools/protorpc/transport/httptransport.html">HttpTransport Class</a></li>
850 <li><a href="../docs/python/tools/protorpc/transport/transport.html">Transport Class</a></li>
852 </ul>
853 </li>
854 <li>WebApp Service Handlers
855 <ul>
856 <li><a href="../docs/python/tools/protorpc/webapp/index.html">Overview</a></li>
857 <li><a href="../docs/python/tools/protorpc/webapp/functions.html">WebApp Service Handlers</a></li>
859 </ul>
860 </li>
862 </ul>
863 </li>
864 <li><a href="../docs/python/tools/webapp/index.html">webapp Framework</a>
865 <ul>
866 <li><a href="../docs/python/tools/webapp/overview.html">Overview</a></li>
867 <li><a href="../docs/python/tools/webapp/running.html">Running the Application</a></li>
868 <li><a href="../docs/python/tools/webapp/requesthandlers.html">Request Handlers</a></li>
869 <li><a href="../docs/python/tools/webapp/requestdata.html">Request Data</a></li>
870 <li><a href="../docs/python/tools/webapp/buildingtheresponse.html">Building the Response</a></li>
871 <li><a href="../docs/python/tools/webapp/redirects.html">Redirects, Headers and Status Codes</a></li>
872 <li><a href="../docs/python/tools/webapp/blobstorehandlers.html">Blobstore Handlers</a></li>
874 <li><span class="tlw-title tlw-expanded">Reference</span>
875 <ul>
876 <li><a href="../docs/python/tools/webapp/requestclass.html">Request</a></li>
877 <li><a href="../docs/python/tools/webapp/responseclass.html">Response</a></li>
878 <li><a href="../docs/python/tools/webapp/requesthandlerclass.html">RequestHandler</a></li>
879 <li><a href="../docs/python/tools/webapp/wsgiapplicationclass.html">WSGIApplication</a></li>
880 <li><a href="../docs/python/tools/webapp/utilmodule.html">Utility Functions</a></li>
882 </ul>
883 </li>
885 </ul>
886 </li>
887 <li><a href="../docs/python/tools/localunittesting.html">Local Unit Testing</a></li>
888 <li><a href="../docs/python/tools/appstats.html">Appstats</a></li>
889 <li><a href="../docs/python/tools/libraries.html">Included Libraries </a>(Python 2.5)</li>
890 <li><a href="../docs/python/tools/libraries27.html">Included Libraries</a>(Python 2.7)</li>
891 <li><a href="../docs/python/tools/appengineconfig.html">Python Module Configuration</a></li>
893 </ul>
894 </li>
895 <li><a href="../docs/python/howto/index.html">How-To</a>
896 <ul>
897 <li><a href="../docs/python/howto/usinggdataservices.html">Google Data Services</a></li>
898 <li><a href="../docs/python/howto/maintenance.html">Handling Scheduled Maintenance Periods</a></li>
900 </ul>
901 </li>
903 </ul>
904 </li>
905 </ul>
906 <div class="line"></div>
907 <ul>
908 <li><h2>Go</h2> <span class="exp-feat">Experimental!</span>
909 <ul>
910 <li><a href="../docs/go/overview.html">Overview</a></li>
911 <li><a href="../docs/go/runtime.html">Runtime Environment</a>
912 <ul>
913 <li><a href="../docs/go/reference.html">Reference</a></li>
914 </ul>
915 </li>
916 <li><a href="../docs/go/backends/index.html">Backends</a>
917 <ul>
918 <li><a href="../docs/go/backends/overview.html">Overview</a></li>
919 <li><a href="../docs/go/backends/runtime.html">Runtime package</a></li>
921 </ul>
922 </li>
923 <li><a href="../docs/go/datastore/index.html">Storing Data</a>
924 <ul>
925 <li><a href="../docs/go/datastore/overview.html">Overview</a></li>
926 <li><a href="../docs/go/datastore/transactions.html">Transactions</a></li>
927 <li><a href="../docs/go/datastore/reference.html">Reference</a></li>
929 </ul>
930 </li>
931 <li><a href="../docs/go/apis.html">Services</a>
932 <ul>
933 <li><a href="../docs/go/blobstore/index.html">Blobstore</a>
934 <ul>
935 <li><a href="../docs/go/blobstore/overview.html">Overview</a></li>
936 <li><a href="../docs/go/blobstore/reference.html">Reference</a></li>
938 </ul>
939 </li>
940 <li><a href="../docs/go/capabilities/index.html">Capabilities</a>
941 <ul>
942 <li><a href="../docs/go/capabilities/overview.html">Overview</a></li>
943 <li><a href="../docs/go/capabilities/reference.html">Reference</a></li>
945 </ul>
946 </li>
947 <li><a href="../docs/go/channel/index.html">Channel</a>
948 <ul>
949 <li><a href="../docs/go/channel/overview.html">Overview</a></li>
950 <li><a href="../docs/go/channel/reference.html">Reference</a></li>
951 <li><a href="../docs/go/channel/javascript.html">Client Javascript Reference</a></li>
953 </ul>
954 </li>
955 <li><a href="../docs/go/mail/index.html">Mail</a>
956 <ul>
957 <li><a href="../docs/go/mail/overview.html">Overview</a></li>
958 <li><a href="../docs/go/mail/reference.html">Reference</a></li>
960 </ul>
961 </li>
962 <li><a href="../docs/go/memcache/index.html">Memcache</a>
963 <ul>
964 <li><a href="../docs/go/memcache/overview.html">Overview</a></li>
965 <li><a href="../docs/go/memcache/reference.html">Reference</a></li>
967 </ul>
968 </li>
969 <li><a href="../docs/go/taskqueue/index.html">Task Queues</a>
970 <ul>
971 <li><a href="../docs/go/taskqueue/overview.html">Overview</a></li>
972 <li><a href="../docs/go/taskqueue/reference.html">Reference</a></li>
973 <li><a href="../docs/go/taskqueue/delay.html">Delay package</a></li>
975 </ul>
976 </li>
977 <li><a href="../docs/go/urlfetch/index.html">URL Fetch</a>
978 <ul>
979 <li><a href="../docs/go/urlfetch/overview.html">Overview</a></li>
980 <li><a href="../docs/go/urlfetch/reference.html">Reference</a></li>
982 </ul>
983 </li>
984 <li><a href="../docs/go/users/index.html">Users</a>
985 <ul>
986 <li><a href="../docs/go/users/overview.html">Overview</a></li>
987 <li><a href="../docs/go/users/reference.html">Reference</a></li>
989 </ul>
990 </li>
991 </ul>
992 <li><a href="../docs/go/config/index.html">Configuration</a>
993 <ul>
994 <li><a href="../docs/go/config/appconfig.html">App Config</a></li>
995 <li><a href="../docs/go/config/backends.html">Backends Config</a></li>
996 <li><a href="../docs/go/config/indexconfig.html">Index Config</a></li>
997 <li><a href="../docs/go/config/cron.html">Scheduled Tasks</a></li>
998 <li><a href="../docs/go/config/queue.html">Task Queue Config</a></li>
999 <li><a href="../docs/go/config/dos.html">DoS Protection Config</a></li>
1001 </ul>
1002 </li>
1003 <li><a href="../docs/go/tools/index.html">Tools</a>
1004 <ul>
1005 <li><a href="../docs/go/tools/devserver.html">Development Server</a></li>
1006 <li><a href="../docs/go/tools/uploadinganapp.html">Uploading and Managing an App</a></li>
1008 </ul>
1009 </li>
1010 </li>
1012 </ul>
1013 </li>
1014 </ul>
1015 <div class="line"></div>
1016 <ul>
1017 <li><h2>Managing Your App</h2>
1018 <ul>
1019 <li><a href="../docs/adminconsole/index.html">Admin Console</a>
1020 <ul>
1021 <li><a href="../docs/adminconsole/instances.html">Instances</a></li>
1022 <li><a href="../docs/adminconsole/roles.html">Roles</a></li>
1023 <li><a href="../docs/adminconsole/applicationsettings.html">Application Settings</a></li>
1024 <li><a href="../docs/adminconsole/datastoreadmin.html">Datastore</a></li>
1025 <li><a href="../docs/adminconsole/performancesettings.html">Performance Settings</a></li>
1027 </ul>
1028 </li>
1029 <li><a href="../docs/quotas.html">Quotas</a></li>
1030 <li><a href="../docs/billing.html">Billing</a></li>
1031 <li><a href="../docs/premier/index.html">Premier Accounts</a></li>
1032 <li><a href="../docs/domain.html">Using a Custom Domain</a></li>
1033 </ul>
1034 </li>
1035 </ul>
1036 <div class="line"></div>
1037 <ul>
1038 <li><h2>Resources</h2>
1039 <ul>
1040 <li><a href="index.html">FAQ</a></li>
1041 <li><a href="../articles/index.html">Articles</a></li>
1042 <li><a href="../docs/videoresources.html">Video Resources</a><sup class="new">New!</sup></li>
1043 <li><a href="http://code.google.com/p/googleappengine/">SDK Code</a></li>
1044 <li><a href="http://code.google.com/p/datanucleus-appengine/">JDO/JPA Code</a></li>
1045 <li><a href="http://code.google.com/p/google-app-engine-samples/">Sample Apps Code</a></li>
1046 <li>Launcher Code
1047 <ul>
1048 <li><a href="http://code.google.com/p/google-appengine-mac-launcher/">Mac</a></li>
1049 <li><a href="http://code.google.com/p/google-appengine-wx-launcher/">Windows/wx</a></li>
1050 </ul>
1051 </li>
1052 <li><a href="../community.html">Discussion Groups</a></li>
1053 </ul>
1054 </li>
1055 </ul>
1056 <div class="line"></div>
1057 <ul>
1058 <li><a href="../docs/roadmap.html">Product Roadmap</a></li>
1059 <li><a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes">Release Notes: Python</a></li>
1060 <li><a href="http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes">Release Notes: Java</a></li>
1061 <li><a href="../docs/revision_history.html">Revision History</a></li>
1062 </ul>
1064 <a class="hidden" href="#gc-topnav-anchor">More Google App Engine resource links</a>
1065 </div>
1067 <a name="gc-pagecontent-anchor"></a>
1068 <div class="g-unit" id="gc-pagecontent">
1069 <script type="text/javascript">CODESITE_docEarlyProcessing();</script>
1070 <h1 class="page_title">Google App Engine Unapplied Writes FAQ</h1>
1074 <div id="jd-content">
1075 <div class="jd-descr">
1077 <ul>
1078 <li><a href="#whatisit">What is an unapplied write?</a></li>
1079 <li><a href="#doihavethem">Does my application have unapplied writes?</a></li>
1080 <li><a href="#corruption">Is my data corrupt?</a></li>
1081 <li><a href="#howdotheyhappen">How do unapplied writes happen?</a></li>
1082 <li><a href="#happenagain">Will this happen again?</a></li>
1083 <li><a href="#workingwith">How do I work with the 'unapplied writes' data?</a></li>
1084 <li><a href="#delete">I don't need the data, I want to just delete it.</a></li>
1085 <li><a href="#moreinfo">Is there anywhere that I can learn more about the low-level implementation of the Datastore and how all of this works?</a></li>
1086 </ul>
1088 <h2 id="whatisit">What is an unapplied write?</h2>
1089 <p>Unapplied writes are writes to the App Engine Datastore that did not get replicated from the primary to the secondary Datastore. Unapplied writes <b>do not</b> impact the transactional consistency and have not corrupted application data. You can think of them as causing the mirror image between the primary and secondary Datastore to be out of sync.</p>
1091 <h2 id="doihavethem">Does my application have unapplied writes?</h2>
1092 <p>If your application has unapplied writes, the administrators listed in the Admin Console of your application will receive an email notification letting them know that they should take action. Alternatively, you can determine if your application has unapplied writes by looking at the <a href="http://appengine.google.com">Admin Console Datastore Viewer</a>. If you see any Kinds in the Kind dropdown box with the prefix <code>__unapplied_write__</code>, your application has unapplied writes that will need to be re-integrated.</p>
1094 <h2 id="corruption">Is my data corrupt?</h2>
1095 <p>No. Unapplied writes <b>do not</b> impact the transactional consistency of application data and have not resulted in corruption. Multiple writes to a single entity group within a transaction are all present; no partial writes are possible.</p>
1097 <h2 id="howdotheyhappen">How do unapplied writes happen?</h2>
1098 <p>During a Datastore outage, it is possible for the primary datacenter to slow down or stop replicating data. As a result, a small amount of recently written data may be unavailable to applications when we move to the secondary datacenter. Because almost all applications have written new data to the Datastore since the outage, we cannot automatically apply the writes on the application's behalf. Application developers need to manually re-integrate the unapplied writes as appropriate for the application's data model.</p>
1100 <h2 id="happenagain">Will it happen again?</h2>
1101 <p>Unapplied writes are caused by an unplanned Datastore outage in our primary datacenter. Based on the performance of our current infrastructure, we expect that this may happen less than once a year. The App Engine team is also actively working on an alternative Datastore configuration that will prevent this issue from happening at all, and we hope to make it available to applications in the near future.</p>
1103 <h2 id="workingwith">How do I work with the unapplied writes?</h2>
1104 <p>There are three ways to work with your data:</p>
1106 <ol>
1107 <li><a href="#entity">Entity-by-entity with the Datastore Viewer</a></li>
1108 <li><a href="#programmatically">Programmatically using the Datastore API</a></li>
1109 <li><a href="#contactus">Directly with the App Engine team</a></li>
1110 </ol>
1111 <h3 id="entity">1. Entity-by-entity with the Datastore Viewer</h3>
1112 <p>The unapplied writes are stored within your application's Datastore. The Kind of the unapplied write has been prefixed with the string <code>__unapplied_write__</code> so that it cannot conflict with any data or queries already happening within your application. The easiest way to view and re-integrate with this data is to simply view the entity in question in the <a href="http://appengine.google.com">Admin Console Datastore Viewer</a>. If you wish to apply an unapplied write to your Datastore, select "Create a Copy" to create a new entity with the same values as the unapplied write. You can also modify any of the values of an entity before it's re-integrated. The Datastore viewer is appropriate for all applications with fewer than 50 unapplied writes.</p>
1114 <h3 id="programmatically">2. Programatically using the Datastore API</h3>
1115 <p>You can also work with the data from within your application. The following code snippets below, in Python and Java, demonstrate how to apply an individual entity with a known key. You will need to add additional code to provide a list of keys.</p>
1117 <p>Java:</p>
1118 <pre class="prettyprint">import com.google.appengine.api.datastore.Key;
1119 import com.google.appengine.api.datastore.KeyFactory;
1120 import com.google.appengine.api.datastore.Entity;
1122 private static final String UNAPPLIED_WRITE_KIND_PREFIX =
1123 "__unapplied_write__";
1125 // Take an unapplied write of kind Greeting with id=4 and apply it
1126 String myKind = "Greeting";
1127 int myId = 4;
1129 Key unappliedKey =
1130 KeyFactory.createKey(UNAPPLIED_WRITE_KIND_PREFIX + myKind, myId);
1132 Entity restoredEntity = new Entity(KeyFactory.createKey(myKind, myId));
1133 restoredEntity.setPropertiesFrom(datastore.get(unappliedKey));
1134 // ... Do something with restoredEntity ...
1136 datastore.put(restoredEntity);</pre>
1138 <p>Python:</p>
1139 <pre class="prettyprint"># Take an unapplied write of type Greeting with id=4 and apply it.
1140 from google.appengine.api import datastore
1142 UNAPPLIED_WRITE_KIND_PREFIX = '__unapplied_write__'
1144 my_kind = 'Greeting'
1145 my_id = 4
1146 key = datastore.Key().from_path(UNAPPLIED_WRITE_KIND_PREFIX + my_kind,
1147 my_id)
1148 unapplied_entity = datastore.Get(key)
1149 # ... Do something with the entity ...
1150 new_entity = datastore.Entity(my_kind, id=my_id)
1151 new_entity.update(unapplied_entity)
1152 datastore.Put(new_entity)</pre>
1153 <p>Python developers can also use the pre-built fix method to reintegrate entities. Here is a <a href="http://code.google.com/p/google-app-engine-samples/source/browse/trunk/recover-unapplied-writes/apply_unapplied_writes.py">downloadable code sample</a> demonstrating how to do this in the context of a sample application.</p>
1155 <h3 id="contactus">3. Directly with the AppEngine team</h3>
1156 <p>We will email all applications affected by unapplied writes directly when we find them in the datastore, but you can also email the team directly to request assistance with re-integration. If your application has more than 200 entities, this is definitely the best way to handle your recovered data.</p>
1157 <p>To request assistance, please email <a href="mailto:appengine-unapplied-writes@google.com">appengine-unapplied-writes@google.com</a> with your application ID, Kind names, and what you'd like us to do with them (apply them to your current Datastore or delete them).</p>
1158 <p>Note that we will prioritize requests based on the number of unapplied writes your application has. If your application has a small number of unapplied writes, we recommend you use one of the first two methods listed above. For issues not related to unapplied writes, please visit the <a href="http://code.google.com/appengine/community.html">App Engine support groups</a>.</p>
1160 <h2 id="delete">I don't need the data, I want to just delete it</h2>
1161 <p>You can delete the data in the Admin Console's Datastore Viewer with the delete button, by iterating over the entities and deleting them with the Datastore API, or by contacting the App Engine team with the above email address. Alternatively, you can leave the data in your datastore; it will not conflict with your production data. Keep in mind that this data does count against your storage budget so if you have a significant number of unapplied writes, you can save storage costs by proactively deleting the data with any of the above methods.</p>
1163 <h2 id="moreinfo">Is there anywhere that I can learn more about the low-level implementation of the Datastore and how all of this works?</h2>
1164 <p>Yes! Ryan Barrett, a member of the App Engine engineering team, has recorded two in-depth talks, including one that talks specifically about how App Engine replicates across datacenters:</p>
1166 <table class="columns">
1167 <tbody>
1168 <tr>
1169 <td>
1170 <a href="http://www.youtube.com/watch?v=tx5gdoNpcZM">App Engine Datastore: Under the Covers</a><br>
1171 <object width="360" height="244"><param name="movie" value="http://www.youtube.com/v/tx5gdoNpcZM&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/tx5gdoNpcZM&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="360" height="244"></embed></object>
1172 </td>
1173 <td>
1174 <a href="http://www.youtube.com/watch?v=srOgpXECblk">Transactions Across Datacenters (and Other Weekend Projects)</a><br>
1175 <object width="360" height="244"><param name="movie" value="http://www.youtube.com/v/srOgpXECblk&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/srOgpXECblk&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="360" height="244"></embed></object>
1176 </td>
1177 </tr>
1178 </tbody>
1179 </table>
1181 </div>
1182 </div>
1186 </div><!-- end gc-pagecontent -->
1187 </div><!-- end gooey wrapper -->
1189 </div> <!-- end codesite content -->
1192 <div id="gc-footer" dir="ltr">
1193 <div class="text">
1195 <div class="notice"><div id="notice" style="text-align: center; border: 1em 0em 1em 0em">
1196 Except as otherwise <a
1197 href="http://code.google.com/policies.html#restrictions">noted</a>,
1198 the content of this page is licensed under the <a rel="license"
1199 href="http://creativecommons.org/licenses/by/3.0/">Creative Commons
1200 Attribution 3.0 License</a>, and code samples are licensed under the
1201 <a rel="license" href="http://www.apache.org/licenses/LICENSE-2.0">Apache
1202 2.0 License</a>.
1203 <!-- <rdf:RDF xmlns="http://web.resource.org/cc/"
1204 xmlns:dc="http://purl.org/dc/elements/1.1/"
1205 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
1206 <Work rdf:about="">
1207 <license rdf:resource="http://creativecommons.org/licenses/by/3.0/" />
1208 </Work>
1209 <License rdf:about="http://creativecommons.org/licenses/by/3.0/">
1210 <permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
1211 <permits rdf:resource="http://web.resource.org/cc/Distribution"/>
1212 <requires rdf:resource="http://web.resource.org/cc/Notice"/>
1213 <requires rdf:resource="http://web.resource.org/cc/Attribution"/>
1214 <permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
1215 </License>
1216 </rdf:RDF> -->
1217 </div>
1218 Java is a registered trademark of Oracle Corporation and/or its affiliates</div>
1220 ©2011 Google -
1221 <a href="http://code.google.com">Code Home</a> -
1222 <a href="http://code.google.com/terms.html">Site Terms of Service</a> -
1223 <a href="http://code.google.com/privacy.html">Privacy Policy</a> -
1224 <a href="http://code.google.com/more">Site Directory</a>
1225 <br> <br>
1226 Google Code offered in:
1227 <a href="http://code.google.com/intl/en">English</a> -
1228 <a href="http://code.google.com/intl/es">Español</a> -
1229 <a href="http://code.google.com/intl/ja">日本語</a> -
1230 <a href="http://code.google.com/intl/ko">한국어</a> -
1231 <a href="http://code.google.com/intl/pt-BR">Português</a> -
1232 <a href="http://code.google.com/intl/ru">Pусский</a> -
1233 <a href="http://code.google.com/intl/zh-CN">中文(简体)</a> -
1234 <a href="http://code.google.com/intl/zh-TW">中文(繁體)</a>
1235 </div>
1236 </div><!-- end gc-footer -->
1238 </div><!-- end gc-container -->
1240 <script type="text/javascript">CODESITE_CSITimer['load'].tick('ats');</script>
1241 <script src="../../js/codesite_tail.pack.04102009.js" type="text/javascript"></script>
1242 <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
1248 </body>
1249 </html>