Data modeling is the process of translating the data requirements of your application to the features of your data storage technology. While the application deals in players, towns, weapons, potions, and gold, the datastore knows only entities, entity groups, keys, properties, and indexes. The data model describes how the data is stored and how it is manipulated. Entities represent players and game objects; properties describe the status of objects and the relationships between them. When an object changes location, the data is updated in a transaction, so the object cannot be in two places at once. When a player wants to know about the weapons in her inventory, the application performs a query for all weapon objects whose location is the player, possibly requiring an index.
In the last few chapters, we’ve been using the Python class
db.Expando to create and manipulate entities and
their properties. As we’ve been doing it, this class illustrates the
flexible nature of the datastore. The datastore itself does not impose or
enforce a structure on entities or their properties, giving the application
control over how individual entities represent data objects. This
flexibility is also an essential feature for scalability: changing the
structure of millions of records is a large task, and the proper strategy
for doing this is specific to the task and the application.
But structure is needed. Every player has a number of health points,