2 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
33 <script type=
"text/javascript" language=
"JavaScript">
34 ORIGINAL_PAGE_PATH
= "/appengine/articles/datastore/overview.html";
38 <meta http-equiv=
"content-type" content=
"text/html; charset=utf-8">
39 <title>Mastering the datastore - 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;
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>
60 <body class=
"gc-documentation">
67 <a id=
"lang-dropdown" class=
"dropdown" href=
"http://code.google.com" onclick=
"return false;"><img width=
"13" height=
"13" class=
"globeicon" src=
"../../../images/globe2_small.png"
68 ><span style=
"text-decoration:underline">English
</span> <span style=
"font-size:.75em;">▼</span></a>
73 <div class=
"gbh" style=
"left:0px;"></div>
74 <div class=
"gbh" style=
"right:0px;"></div>
76 <div id=
"gc-container">
79 <a href=
"#gc-pagecontent-anchor">Skip to page content
</a>
80 <a href=
"#gc-toc-anchor">Skip to main navigation
</a>
84 <div id=
"logo"><a href=
"http://code.google.com">
87 <img src=
"../../../images/code_logo.png" height=
"40" width=
"161" alt=
"Google Code" style=
"border:0;margin:3px 0 0 0;">
92 <div id=
"searchForm" class=
"searchForm">
93 <form id=
"cse" action=
"http://www.google.com/cse" accept-charset=
"utf-8" class=
"gsc-search-box" onsubmit=
"executeGSearch(document.getElementById('gsearchInput').value); return false;">
95 <input type=
"hidden" name=
"cref" value=
"http://code.google.com/cse/googlecode-context.xml">
97 <div id=
"gsc-search-box">
98 <input id=
"gsearchInput" type=
"text" name=
"q" maxlength=
"2048" class=
"gsc-input" autocomplete=
"off" title=
"Google Code Search" style=
"width:345px">
99 <div id=
"cs-searchresults" onclick=
"event.cancelBubble = true;"></div>
100 <input title=
"Search" id=
"gsearchButton" class=
"gsc-search-button" name=
"sa" value=
"Search" type=
"submit">
101 <div class=
"greytext">e.g.
"templates" or
"datastore"</div>
104 </div> <!-- end searchForm -->
105 </div> <!-- end search -->
110 </div> <!-- end gc-header -->
113 <div id=
"codesiteContent">
115 <a id=
"gc-topnav-anchor"></a>
117 <h1 style=
"padding:0 0 0 6px;">Google App Engine
</h1>
118 <ul id=
"articles" class=
"gc-topnav-tabs">
121 <a href=
"../../index.html" title=
"Google App Engine home page">Home
</a>
125 <a href=
"../../docs/index.html" title=
"Official Google App Engine documentation">Docs
</a>
129 <a href=
"../../kb/index.html" title=
"Answers to frequently asked questions about Google App Engine">FAQ
</a>
132 <li id=
"articles_link">
133 <a href=
"../index.html" class=
"selected" title=
"Focused articles and tutorials for Google App Engine developers">Articles
</a>
137 <a href=
"http://googleappengine.blogspot.com/" title=
"Official Google App Engine blog">Blog
</a>
141 <a href=
"../../community.html" title=
"Community home for Google App Engine">Community
</a>
145 <a href=
"../../terms.html" title=
"Google App Engine terms of service">Terms
</a>
149 <a href=
"../../downloads.html" title=
"Download Google App Engine">Download
</a>
154 </div> <!-- end gc-topnav -->
156 <div class=
"g-section g-tpl-170">
158 <a name=
"gc-toc-anchor"></a>
159 <div class=
"g-unit g-first" id=
"gc-toc">
161 <li><a href=
"../../downloads.html">Downloads
</a></li>
162 <li><a href=
"http://code.google.com/status/appengine">System Status
</a></li>
163 <li><a href=
"http://code.google.com/p/googleappengine/issues/list">Issue Tracker
</a></li>
164 <li><a href=
"../../business/index.html">App Engine for Business
</a> <sup class=
"new">New!
</sup></li>
166 <div class=
"line"></div>
168 <li><h2>Getting Started
</h2>
170 <li><a href=
"../../docs/whatisgoogleappengine.html">What Is Google App Engine?
</a></li>
171 <li><a href=
"../../docs/java/gettingstarted/index.html">Java
</a>
173 <li><a href=
"../../docs/java/gettingstarted/introduction.html">Introduction
</a></li>
174 <li><a href=
"../../docs/java/gettingstarted/installing.html">Installing the Java SDK
</a></li>
175 <li><a href=
"../../docs/java/gettingstarted/creating.html">Creating a Project
</a></li>
176 <li><a href=
"../../docs/java/gettingstarted/usingusers.html">Using the Users Service
</a></li>
177 <li><a href=
"../../docs/java/gettingstarted/usingjsps.html">Using JSPs
</a></li>
178 <li><a href=
"../../docs/java/gettingstarted/usingdatastore.html">Using the Datastore with JDO
</a></li>
179 <li><a href=
"../../docs/java/gettingstarted/staticfiles.html">Using Static Files
</a></li>
180 <li><a href=
"../../docs/java/gettingstarted/uploading.html">Uploading Your Application
</a></li>
184 <li><a href=
"../../docs/python/gettingstarted/index.html">Python
</a>
186 <li><a href=
"../../docs/python/gettingstarted/introduction.html">Introduction
</a></li>
187 <li><a href=
"../../docs/python/gettingstarted/devenvironment.html">The Development Environment
</a></li>
188 <li><a href=
"../../docs/python/gettingstarted/helloworld.html">Hello, World!
</a></li>
189 <li><a href=
"../../docs/python/gettingstarted/usingwebapp.html">Using the webapp Framework
</a></li>
190 <li><a href=
"../../docs/python/gettingstarted/usingusers.html">Using the Users Service
</a></li>
191 <li><a href=
"../../docs/python/gettingstarted/handlingforms.html">Handling Forms With webapp
</a></li>
192 <li><a href=
"../../docs/python/gettingstarted/usingdatastore.html">Using the Datastore
</a></li>
193 <li><a href=
"../../docs/python/gettingstarted/templates.html">Using Templates
</a></li>
194 <li><a href=
"../../docs/python/gettingstarted/staticfiles.html">Using Static Files
</a></li>
195 <li><a href=
"../../docs/python/gettingstarted/uploading.html">Uploading Your Application
</a></li>
202 <div class=
"line"></div>
206 <li><a href=
"../../docs/java/overview.html">Overview
</a></li>
207 <li><a href=
"../../docs/java/runtime.html">Servlet Environment
</a></li>
208 <li><a href=
"../../docs/java/datastore/index.html">Storing Data
</a>
210 <li><a href=
"../../docs/java/datastore/overview.html">Overview
</a></li>
211 <li><a href=
"../../docs/java/datastore/usingjdo.html">Using JDO
</a></li>
212 <li><a href=
"../../docs/java/datastore/dataclasses.html">Defining Data Classes
</a></li>
213 <li><a href=
"../../docs/java/datastore/creatinggettinganddeletingdata.html">Creating, Getting and Deleting Data
</a></li>
214 <li><a href=
"../../docs/java/datastore/queriesandindexes.html">Queries and Indexes
</a></li>
215 <li><a href=
"../../docs/java/datastore/transactions.html">Transactions
</a></li>
216 <li><a href=
"../../docs/java/datastore/relationships.html">Relationships
</a></li>
217 <li><a href=
"../../docs/java/datastore/stats.html">Statistics
</a></li>
218 <li><a href=
"../../docs/java/datastore/usingjpa.html">Using JPA
</a></li>
219 <li><a href=
"../../docs/java/javadoc/com/google/appengine/api/datastore/package-summary.html">Low-level API
</a></li>
223 <li><a href=
"../../docs/java/apis.html">Services
</a>
225 <li><a href=
"../../docs/java/blobstore/index.html">Blobstore
</a>
227 <li><a href=
"../../docs/java/blobstore/overview.html">Overview
</a></li>
228 <li><span class=
"tlw-title tlw-expanded">Reference
</span>
230 <li><a href=
"../../docs/java/javadoc/com/google/appengine/api/blobstore/package-summary.html">API Reference
</a></li>
236 <li><a href=
"../../docs/java/images/index.html">Images
</a>
238 <li><a href=
"../../docs/java/images/overview.html">Overview
</a></li>
239 <li><a href=
"../../docs/java/javadoc/com/google/appengine/api/images/package-summary.html">API Reference
</a></li>
243 <li><a href=
"../../docs/java/mail/index.html">Mail
</a>
245 <li><a href=
"../../docs/java/mail/overview.html">Overview
</a></li>
246 <li><a href=
"../../docs/java/mail/usingjavamail.html">Using JavaMail to Send Mail
</a></li>
247 <li><a href=
"../../docs/java/mail/receiving.html">Receiving Mail
</a></li>
248 <li><a href=
"../../docs/java/javadoc/com/google/appengine/api/mail/package-summary.html">Low-level API
</a></li>
252 <li><a href=
"../../docs/java/memcache/index.html">Memcache
</a>
254 <li><a href=
"../../docs/java/memcache/overview.html">Overview
</a></li>
255 <li><a href=
"../../docs/java/memcache/usingjcache.html">Using JCache
</a></li>
256 <li><a href=
"../../docs/java/javadoc/com/google/appengine/api/memcache/package-summary.html">Low-level API
</a></li>
260 <li><a href=
"../../docs/java/multitenancy/index.html">Multitenancy
</a>
262 <li><a href=
"../../docs/java/multitenancy/overview.html">Overview
</a></li>
263 <li><a href=
"../../docs/java/multitenancy/multitenancy.html">Multitenancy with Namespaces
</a></li>
264 <li><a href=
"../../docs/java/multitenancy/namespaces.html">Other Uses for Namespaces
</a></li>
265 <li><a href=
"../../docs/java/javadoc/com/google/appengine/api/NamespaceManager.html">API Reference
</a>
269 <li><a href=
"../../docs/java/oauth/index.html">OAuth
</a>
271 <li><a href=
"../../docs/java/oauth/overview.html">Overview
</a></li>
272 <li><a href=
"../../docs/java/javadoc/com/google/appengine/api/oauth/package-summary.html">API Reference
</a></li>
277 <li><a href=
"../../docs/java/taskqueue/index.html">Task Queues
</a>
279 <li><a href=
"../../docs/java/taskqueue/overview.html">Overview
</a></li>
280 <li><a href=
"../../docs/java/javadoc/com/google/appengine/api/labs/taskqueue/package-summary.html">API Reference
</a></li>
284 <li><a href=
"../../docs/java/urlfetch/index.html">URL Fetch
</a>
286 <li><a href=
"../../docs/java/urlfetch/overview.html">Overview
</a></li>
287 <li><a href=
"../../docs/java/urlfetch/usingjavanet.html">Using java.net
</a></li>
288 <li><a href=
"../../docs/java/javadoc/com/google/appengine/api/urlfetch/package-summary.html">Low-level API
</a></li>
292 <li><a href=
"../../docs/java/users/index.html">Users
</a>
294 <li><a href=
"../../docs/java/users/overview.html">Overview
</a></li>
295 <li><a href=
"../../docs/java/javadoc/com/google/appengine/api/users/package-summary.html">API Reference
</a></li>
299 <li><a href=
"../../docs/java/xmpp/index.html">XMPP
</a>
301 <li><a href=
"../../docs/java/xmpp/overview.html">Overview
</a></li>
302 <li><a href=
"../../docs/java/javadoc/com/google/appengine/api/xmpp/package-summary.html">API Reference
</a></li>
308 <li><a href=
"../../docs/java/javadoc/index.html">Services Javadoc
</a></li>
309 <li><a href=
"../../docs/java/jrewhitelist.html">JRE Class White List
</a></li>
310 <li><a href=
"../../docs/java/config/index.html">Configuration
</a>
312 <li><a href=
"../../docs/java/config/webxml.html">Deployment Descriptor
</a></li>
313 <li><a href=
"../../docs/java/config/appconfig.html">App Config
</a></li>
314 <li><a href=
"../../docs/java/config/indexconfig.html">Index Config
</a></li>
315 <li><a href=
"../../docs/java/config/cron.html">Scheduled Tasks
</a></li>
316 <li><a href=
"../../docs/java/config/queue.html">Task Queue Config
</a></li>
317 <li><a href=
"../../docs/java/config/dos.html">DoS Protection Config
</a></li>
321 <li><a href=
"../../docs/java/configyaml/index.html">YAML Configuration
</a>
323 <li><a href=
"../../docs/java/configyaml/appconfig_yaml.html">YAML App Config
</a></li>
324 <li><a href=
"../../docs/java/configyaml/indexconfig.html">Index Config
</a></li>
325 <li><a href=
"../../docs/java/configyaml/cron.html">Scheduled Tasks
</a></li>
326 <li><a href=
"../../docs/java/configyaml/queue.html">Task Queue Config
</a></li>
327 <li><a href=
"../../docs/java/configyaml/dos.html">DoS Protection Config
</a></li>
331 <li><a href=
"../../docs/java/tools/index.html">Tools
</a>
333 <li><a href=
"../../docs/java/tools/devserver.html">Development Server
</a></li>
334 <li><a href=
"../../docs/java/tools/uploadinganapp.html">Uploading and Managing
</a></li>
335 <li><a href=
"../../docs/java/tools/eclipse.html">Google Plugin for Eclipse
</a></li>
336 <li><a href=
"../../docs/java/tools/ant.html">Using Apache Ant
</a></li>
337 <li><a href=
"../../docs/java/tools/localunittesting.html">Local Unit Testing
</a>
339 <li><a href=
"../../docs/java/tools/localunittesting/javadoc/index.html">Testing Javadoc
</a></li>
342 <li><a href=
"../../docs/java/tools/appstats.html">Appstats
</a></li>
346 <li><a href=
"../../docs/java/howto/index.html">How-To
</a>
348 <li><a href=
"../../docs/java/howto/maintenance.html">Handling Scheduled Maintenance Periods
</a></li>
356 <div class=
"line"></div>
360 <li><a href=
"../../docs/python/overview.html">Overview
</a></li>
361 <li><a href=
"../../docs/python/runtime.html">CGI Environment
</a></li>
362 <li><a href=
"../../docs/python/datastore/index.html">Storing Data
</a>
364 <li><a href=
"../../docs/python/datastore/overview.html">Overview
</a></li>
365 <li><a href=
"../../docs/python/datastore/entitiesandmodels.html">Entities and Models
</a></li>
366 <li><a href=
"../../docs/python/datastore/creatinggettinganddeletingdata.html">Creating, Getting and Deleting Data
</a></li>
367 <li><a href=
"../../docs/python/datastore/keysandentitygroups.html">Keys and Entity Groups
</a></li>
368 <li><a href=
"../../docs/python/datastore/queriesandindexes.html">Queries and Indexes
</a></li>
369 <li><a href=
"../../docs/python/datastore/transactions.html">Transactions
</a></li>
370 <li><a href=
"../../docs/python/datastore/typesandpropertyclasses.html">Types and Property Classes
</a></li>
371 <li><a href=
"../../docs/python/datastore/gqlreference.html">GQL Reference
</a></li>
372 <li><a href=
"../../docs/python/datastore/stats.html">Statistics
</a></li>
374 <li><span class=
"tlw-title tlw-expanded">Reference
</span>
376 <li><a href=
"../../docs/python/datastore/modelclass.html">Model
</a></li>
377 <li><a href=
"../../docs/python/datastore/expandoclass.html">Expando
</a></li>
378 <li><a href=
"../../docs/python/datastore/polymodelclass.html">PolyModel
</a></li>
379 <li><a href=
"../../docs/python/datastore/propertyclass.html">Property
</a></li>
380 <li><a href=
"../../docs/python/datastore/queryclass.html">Query
</a></li>
381 <li><a href=
"../../docs/python/datastore/gqlqueryclass.html">GqlQuery
</a></li>
382 <li><a href=
"../../docs/python/datastore/keyclass.html">Key
</a></li>
383 <li><a href=
"../../docs/python/datastore/functions.html">Functions
</a></li>
384 <li><a href=
"../../docs/python/datastore/exceptions.html">Exceptions
</a></li>
390 <li><a href=
"../../docs/python/apis.html">Services
</a>
392 <li><a href=
"../../docs/python/blobstore/index.html">Blobstore
</a>
394 <li><a href=
"../../docs/python/blobstore/overview.html">Overview
</a></li>
395 <li><span class=
"tlw-title tlw-expanded">Reference
</span>
397 <li><a href=
"../../docs/python/blobstore/blobinfoclass.html">BlobInfo
</a></li>
398 <li><a href=
"../../docs/python/blobstore/blobkeyclass.html">BlobKey
</a></li>
399 <li><a href=
"../../docs/python/blobstore/blobreaderclass.html">BlobReader
</a></li>
400 <li><a href=
"../../docs/python/blobstore/functions.html">Functions
</a></li>
401 <li><a href=
"../../docs/python/blobstore/exceptions.html">Exceptions
</a></li>
407 <li><a href=
"../../docs/python/images/index.html">Images
</a>
409 <li><a href=
"../../docs/python/images/overview.html">Overview
</a></li>
410 <li><a href=
"../../docs/python/images/installingPIL.html">Installing PIL
</a></li>
411 <li><a href=
"../../docs/python/images/usingimages.html">Using the Images API
</a></li>
412 <li><span class=
"tlw-title tlw-expanded">Reference
</span>
414 <li><a href=
"../../docs/python/images/imageclass.html">Image
</a></li>
415 <li><a href=
"../../docs/python/images/functions.html">Functions
</a></li>
416 <li><a href=
"../../docs/python/images/exceptions.html">Exceptions
</a></li>
422 <li><a href=
"../../docs/python/mail/index.html">Mail
</a>
424 <li><a href=
"../../docs/python/mail/overview.html">Overview
</a></li>
425 <li><a href=
"../../docs/python/mail/sendingmail.html">Sending Mail
</a></li>
426 <li><a href=
"../../docs/python/mail/receivingmail.html">Receiving Mail
</a></li>
427 <li><a href=
"../../docs/python/mail/attachments.html">Attachments
</a></li>
428 <li><span class=
"tlw-title tlw-expanded">Reference
</span>
430 <li><a href=
"../../docs/python/mail/emailmessageclass.html">EmailMessage
</a></li>
431 <li><a href=
"../../docs/python/mail/emailmessagefields.html">Message Fields
</a></li>
432 <li><a href=
"../../docs/python/mail/functions.html">Functions
</a></li>
433 <li><a href=
"../../docs/python/mail/exceptions.html">Exceptions
</a></li>
439 <li><a href=
"../../docs/python/memcache/index.html">Memcache
</a>
441 <li><a href=
"../../docs/python/memcache/overview.html">Overview
</a></li>
442 <li><a href=
"../../docs/python/memcache/usingmemcache.html">Using Memcache
</a></li>
443 <li><span class=
"tlw-title tlw-expanded">Reference
</span>
445 <li><a href=
"../../docs/python/memcache/clientclass.html">Client
</a></li>
446 <li><a href=
"../../docs/python/memcache/functions.html">Functions
</a></li>
452 <li><a href=
"../../docs/python/multitenancy/index.html">Multitenancy
</a>
454 <li><a href=
"../../docs/python/multitenancy/overview.html">Overview
</a></li>
455 <li><a href=
"../../docs/python/multitenancy/multitenancy.html">Multitenancy with Namespaces
</a></li>
456 <li><a href=
"../../docs/python/multitenancy/namespaces.html">Other Uses for Namespaces
</a></li>
459 <li><a href=
"../../docs/python/multitenancy/functions.html">Functions
</a></li>
460 <li><a href=
"../../docs/python/multitenancy/exceptions.html">Exceptions
</a></li>
466 <li><a href=
"../../docs/python/oauth/index.html">OAuth
</a>
468 <li><a href=
"../../docs/python/oauth/overview.html">Overview
</a></li>
469 <li><span class=
"tlw-title tlw-expanded">Reference
</span>
471 <li><a href=
"../../docs/python/oauth/functions.html">Functions
</a></li>
472 <li><a href=
"../../docs/python/oauth/exceptions.html">Exceptions
</a></li>
478 <li><a href=
"../../docs/python/taskqueue/index.html">Task Queues
</a>
480 <li><a href=
"../../docs/python/taskqueue/overview.html">Overview
</a></li>
481 <li><span class=
"tlw-title tlw-expanded">Reference
</span>
483 <li><a href=
"../../docs/python/taskqueue/tasks.html">Task Class
</a></li>
484 <li><a href=
"../../docs/python/taskqueue/queues.html">Queue Class
</a></li>
485 <li><a href=
"../../docs/python/taskqueue/functions.html">Functions
</a></li>
486 <li><a href=
"../../docs/python/taskqueue/exceptions.html">Exceptions
</a></li>
492 <li><a href=
"../../docs/python/urlfetch/index.html">URL Fetch
</a>
494 <li><a href=
"../../docs/python/urlfetch/overview.html">Overview
</a></li>
495 <li><span class=
"tlw-title tlw-expanded">Reference
</span>
497 <li><a href=
"../../docs/python/urlfetch/fetchfunction.html">The fetch Function
</a></li>
498 <li><a href=
"../../docs/python/urlfetch/asynchronousrequests.html">Asynchronous Requests
</a></li>
499 <li><a href=
"../../docs/python/urlfetch/responseobjects.html">Response Objects
</a></li>
500 <li><a href=
"../../docs/python/urlfetch/exceptions.html">Exceptions
</a></li>
506 <li><a href=
"../../docs/python/users/index.html">Users
</a>
508 <li><a href=
"../../docs/python/users/overview.html">Overview
</a></li>
509 <li><a href=
"../../docs/python/users/userobjects.html">User Objects
</a></li>
510 <li><a href=
"../../docs/python/users/loginurls.html">Login URLs
</a></li>
511 <li><a href=
"../../docs/python/users/adminusers.html">Admin Users
</a></li>
513 <li><span class=
"tlw-title tlw-expanded">Reference
</span>
515 <li><a href=
"../../docs/python/users/userclass.html">User
</a></li>
516 <li><a href=
"../../docs/python/users/functions.html">Functions
</a></li>
517 <li><a href=
"../../docs/python/users/exceptions.html">Exceptions
</a></li>
523 <li><a href=
"../../docs/python/xmpp/index.html">XMPP
</a>
525 <li><a href=
"../../docs/python/xmpp/overview.html">Overview
</a></li>
526 <li><span class=
"tlw-title tlw-expanded">Reference
</span>
528 <li><a href=
"../../docs/python/xmpp/functions.html">Functions
</a></li>
529 <li><a href=
"../../docs/python/xmpp/messageclass.html">Message
</a></li>
530 <li><a href=
"../../docs/python/xmpp/exceptions.html">Exceptions
</a></li>
538 <li><a href=
"../../docs/python/config/index.html">Configuration
</a>
540 <li><a href=
"../../docs/python/config/appconfig.html">App Config
</a></li>
541 <li><a href=
"../../docs/python/config/indexconfig.html">Index Config
</a></li>
542 <li><a href=
"../../docs/python/config/cron.html">Scheduled Tasks
</a></li>
543 <li><a href=
"../../docs/python/config/queue.html">Task Queue Config
</a></li>
544 <li><a href=
"../../docs/python/config/dos.html">DoS Protection Config
</a></li>
548 <li><a href=
"../../docs/python/tools/index.html">Tools
</a>
550 <li><a href=
"../../docs/python/tools/devserver.html">Development Server
</a></li>
551 <li><a href=
"../../docs/python/tools/uploadinganapp.html">Uploading and Managing
</a></li>
552 <li><a href=
"../../docs/python/tools/uploadingdata.html">Uploading and Downloading Data
</a></li>
553 <li><a href=
"../../docs/python/tools/webapp/index.html">webapp Framework
</a>
555 <li><a href=
"../../docs/python/tools/webapp/overview.html">Overview
</a></li>
556 <li><a href=
"../../docs/python/tools/webapp/running.html">Running the Application
</a></li>
557 <li><a href=
"../../docs/python/tools/webapp/requesthandlers.html">Request Handlers
</a></li>
558 <li><a href=
"../../docs/python/tools/webapp/requestdata.html">Request Data
</a></li>
559 <li><a href=
"../../docs/python/tools/webapp/buildingtheresponse.html">Building the Response
</a></li>
560 <li><a href=
"../../docs/python/tools/webapp/redirects.html">Redirects, Headers and Status Codes
</a></li>
561 <li><a href=
"../../docs/python/tools/webapp/blobstorehandlers.html">Blobstore Handlers
</a></li>
563 <li><span class=
"tlw-title tlw-expanded">Reference
</span>
565 <li><a href=
"../../docs/python/tools/webapp/requestclass.html">Request
</a></li>
566 <li><a href=
"../../docs/python/tools/webapp/responseclass.html">Response
</a></li>
567 <li><a href=
"../../docs/python/tools/webapp/requesthandlerclass.html">RequestHandler
</a></li>
568 <li><a href=
"../../docs/python/tools/webapp/wsgiapplicationclass.html">WSGIApplication
</a></li>
569 <li><a href=
"../../docs/python/tools/webapp/utilmodule.html">Utility Functions
</a></li>
576 <li><a href=
"../../docs/python/tools/appstats.html">Appstats
</a></li>
577 <li><a href=
"../../docs/python/tools/libraries.html">Third-party Libraries
</a></li>
581 <li><a href=
"../../docs/python/howto/index.html">How-To
</a>
583 <li><a href=
"../../docs/python/howto/usinggdataservices.html">Google Data Services
</a></li>
584 <li><a href=
"../../docs/python/howto/maintenance.html">Handling Scheduled Maintenance Periods
</a></li>
592 <div class=
"line"></div>
594 <li><h2>Managing Your App
</h2>
596 <li><a href=
"../../docs/theadminconsole.html">The Admin Console
</a></li>
597 <li><a href=
"../../docs/quotas.html">Quotas
</a></li>
598 <li><a href=
"../../docs/billing.html">Billing
</a></li>
599 <li><a href=
"../../docs/domain.html">Using a Custom Domain
</a></li>
603 <div class=
"line"></div>
605 <li><h2>Resources
</h2>
607 <li><a href=
"../../kb/index.html">FAQ
</a></li>
608 <li><a href=
"../index.html">Articles
</a></li>
609 <li><a href=
"http://appengine-cookbook.appspot.com/">Cookbook
</a></li>
610 <li><a href=
"http://appgallery.appspot.com/">App Gallery
</a></li>
611 <li><a href=
"http://code.google.com/p/googleappengine/">SDK Code
</a></li>
612 <li><a href=
"http://code.google.com/p/datanucleus-appengine/">JDO/JPA Code
</a></li>
613 <li><a href=
"http://code.google.com/p/google-app-engine-samples/">Sample Apps Code
</a></li>
616 <li><a href=
"http://code.google.com/p/google-appengine-mac-launcher/">Mac
</a></li>
617 <li><a href=
"http://code.google.com/p/google-appengine-wx-launcher/">Windows/wx
</a></li>
620 <li><a href=
"../../community.html">Discussion Groups
</a></li>
624 <div class=
"line"></div>
626 <li><a href=
"../../docs/roadmap.html">Product Roadmap
</a></li>
627 <li><a href=
"http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes">Release Notes: Python
</a></li>
628 <li><a href=
"http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes">Release Notes: Java
</a></li>
629 <li><a href=
"../../docs/revision_history.html">Revision History
</a></li>
632 <a class=
"hidden" href=
"#gc-topnav-anchor">More Google App Engine resource links
</a>
635 <a name=
"gc-pagecontent-anchor"></a>
636 <div class=
"g-unit" id=
"gc-pagecontent">
637 <script type=
"text/javascript">CODESITE_docEarlyProcessing();</script>
638 <h1 class=
"page_title">Mastering the datastore
</h1>
642 <div id=
"jd-content">
643 <div class=
"jd-descr">
645 <p>Unlike most other Java web application development environments, App Engine's data storage service is not based on a relational database management system. Instead, App Engine's datastore (
<a href=
"../../docs/python/datastore/index.html">Python
</a> |
<a href=
"../../docs/java/datastore/index.html">Java
</a>) is built on top of
<a href=
"http://labs.google.com/papers/bigtable.html">Bigtable
</a>, and this will likely require you to re-think the methods that you have traditionally used when modeling and querying for data.
</p>
647 <p>In this article series, we aim to provide information supplementary to the datastore documentation that should help provide a better understanding of how the datastore works, how to deal with issues related to using a distributed storage system, and provide best practices on techniques to model and retrieve your data. The articles in this series include:
</p>
651 <dt><a href=
"../life_of_write.html">Life of a Datastore Write
</a></dt>
652 <dd>Learn everything that occurs behind-the-scenes when an entity is written to the datastore
</dd>
653 <dt><a href=
"../transaction_isolation.html">Transaction Isolation in App Engine
</a></dt>
654 <dd>Explains how concurrent reads and writes behave both in and outside of transactions
</dd>
655 <dt><a href=
"../index_building.html">How Index Building Works
</a></dt>
656 <dd>Explains the back-end processes used to build and delete composite indexes
</dd>
657 <dt><a href=
"../storage_breakdown.html">How Entities and Indexes are Stored
</a></dt>
658 <dd>Provides detailed descriptions of the Bigtables used to store entities and indexes
</dd>
659 <dt><a href=
"../modeling.html">Modeling Entity Relationships
</a></dt>
660 <dd>Explains the basics of modeling entity relationships
</dd>
661 <dt><a href=
"../update_schema.html">Updating Your Model's Schema
</a></dt>
662 <dd>Discusses strategies for updating datastore schemas
</dd>
663 <dt><a href=
"../handling_datastore_errors.html">Handling Datastore Errors
</a></dt>
664 <dd>Learn why datastore errors occur and how to deal with them
</dd>
670 </div><!-- end gc-pagecontent -->
671 </div><!-- end gooey wrapper -->
673 </div> <!-- end codesite content -->
676 <div id=
"gc-footer" dir=
"ltr">
679 <div class=
"notice"><div id=
"notice" style=
"text-align: center; border: 1em 0em 1em 0em">
680 Except as otherwise
<a
681 href=
"http://code.google.com/policies.html#restrictions">noted
</a>,
682 the content of this page is licensed under the
<a rel=
"license"
683 href=
"http://creativecommons.org/licenses/by/3.0/">Creative Commons
684 Attribution
3.0 License
</a>, and code samples are licensed under the
685 <a rel=
"license" href=
"http://www.apache.org/licenses/LICENSE-2.0">Apache
687 <!-- <rdf:RDF xmlns="http://web.resource.org/cc/"
688 xmlns:dc="http://purl.org/dc/elements/1.1/"
689 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
691 <license rdf:resource="http://creativecommons.org/licenses/by/3.0/" />
693 <License rdf:about="http://creativecommons.org/licenses/by/3.0/">
694 <permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
695 <permits rdf:resource="http://web.resource.org/cc/Distribution"/>
696 <requires rdf:resource="http://web.resource.org/cc/Notice"/>
697 <requires rdf:resource="http://web.resource.org/cc/Attribution"/>
698 <permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
702 Java is a registered trademark of Sun Microsystems, Inc.
</div>
705 <a href=
"http://code.google.com">Code Home
</a> -
706 <a href=
"http://code.google.com/terms.html">Terms of Service
</a> -
707 <a href=
"http://code.google.com/privacy.html">Privacy Policy
</a> -
708 <a href=
"http://code.google.com/more">Site Directory
</a>
710 Google Code offered in:
711 <a href=
"http://code.google.com/intl/en">English
</a> -
712 <a href=
"http://code.google.com/intl/es">Español
</a> -
713 <a href=
"http://code.google.com/intl/ja">日本語
</a> -
714 <a href=
"http://code.google.com/intl/ko">한국어
</a> -
715 <a href=
"http://code.google.com/intl/pt-BR">Português
</a> -
716 <a href=
"http://code.google.com/intl/ru">Pусский
</a> -
717 <a href=
"http://code.google.com/intl/zh-CN">中文(简体)
</a> -
718 <a href=
"http://code.google.com/intl/zh-TW">中文(繁體)
</a>
720 </div><!-- end gc-footer -->
722 </div><!-- end gc-container -->
724 <script type=
"text/javascript">CODESITE_CSITimer
['load'].tick('ats');</script>
725 <script src=
"../../../js/codesite_tail.pack.04102009.js" type=
"text/javascript"></script>
730 <script type=
"text/javascript">
731 var _gaq
= _gaq
|| [];
736 ['siteTracker._setAccount', 'UA-18071-1'],
737 ['siteTracker._setDomainName', 'code.google.com'],
738 ['siteTracker._setCookiePath', window
.location
.pathname
.substring(0,
739 window
.location
.pathname
.lastIndexOf('/') + 1)],
740 ['siteTracker._trackPageview']
743 var ga
= document
.createElement('script');
745 ga
.type
= 'text/javascript';
747 ga
.src
= 'http://www.google-analytics.com/ga.js';
748 (document
.getElementsByTagName('head')[0] ||
749 document
.getElementsByTagName('body')[0]).appendChild(ga
);