Get started with Google Cloud Datastore - a fast, powerful, NoSQL database

MAY 16, 2013
Author Photo
By Chris Ramsdale, Product Manager

Cross-posted from the Google Cloud Platform Blog

At Google I/O, we announced Google Cloud Datastore, a fully managed solution for storing non-relational data. Based on the popular Google App Engine High Replication Datastore (HRD), Cloud Datastore provides a schemaless, non-relational datastore with the same accessibility of Google Cloud Storage and Google Cloud SQL.

Cloud Datastore builds off the strong growth and performance of HRD, which has over 1PB of data stored, 4.5 trillion transactions per month and a 99.95% uptime. It also comes with the following features:

Getting started with Cloud Datastore 

To get started, head over to the Google Cloud Console and create a new project. After supplying a few pieces of information you will have a Cloud Project that has the Cloud Datastore enabled by default. For this post we’ll use the project ID cloud-demo.

With the project created and the Cloud Datastore enabled, we’ll need to download the Cloud Datastore client library. Once installed, it’s time to start writing some code. For the sake of this post, we’ll focus on accessing the Cloud Datastore from a Python application running on a Compute Engine VM (which is also now in Preview). We’ll assume that you’ve already created a new VM instance.'
import googledatastore as datastore

      def main()
      writeEntity()
      readEntity()
      
Next include writeEntity() and readEntity() functions:
def WriteEntity():
      req = datastore.BlindWriteRequest()
      entity = req.mutation.upsert.add()
      path = entity.key.path_element.add()
      path.kind = 'Greeting'
      path.name = 'foo'
      message = entity.property.add()
      message.name = 'message'
      value = message.value.add()
      value.string_value = 'to the cloud and beyond!'
      try:
      datastore.blind_write(req)
      except datastore.RPCError as e:
      # remember to do something useful with the exception pass

      def ReadEntity():
      req = datastore.LookupRequest()
      key = req.key.add()
      path = key.path_element.add()
      path.kind = 'Greeting0'
      path.name = 'foo0'
      try:
      resp = datastore.lookup(req)
      return resp
      except datastore.RPCError as e:
      # remember to do something useful with the exception pass
      
First create a new file called “demo.py”. Inside demo.py, we’ll add code to write and then read an entity from the Cloud Datastore.  Finally we can update main() to print out the property values within the fetched entity:
def main()
      writeEntity();
      resp = readEntity();

      entity = resp.found[0].entity
      for p in entity.property:
      print 'Entity property name: %s', p.name
      v = p.value[0]
      print 'Entity property value: %s', v.string_value
      
Before we can run this code we need to tell the SDK which Cloud Datastore instance we would like to use. This is done by exporting the following environment variable:
~$ export DATASTORE_DATASET cloud-datastore-demo
      
Finally we’re able to run the application by simply issuing the following:
~$ python demo.py
Besides the output that we see in console window, we’re also able to monitor our interactions within the Cloud Console. By navigating back to Cloud Console, selecting our cloud-datastore-demo project, and then selecting the Cloud Datastore we’re taken to our instance’s dashboard page that includes number of entities, properties, and property types, as well as index management, ad-hoc query support and breakdown of stored data.

And that’s really just the beginning. To fully harness the features and functionality that the Cloud Datastore offers, be sure to check out the larger Getting Started Guide and the Cloud Datastore documentation.

Cloud Datastore is the latest addition to the Cloud Platform storage family, joining Cloud Storage for storing blob data, Cloud SQL for storing relational data, and Persistent Disk for storing block data. All fully managed so that you can focus on creating amazing solutions and leave the rest to us.

And while this is a Preview Release, the team is off to a great start. As we move the service towards General Availability we’re looking forward to improving JSON support, more deeply integrating with the Cloud Console, streamlining our billing and driving every bit of performance that we can out of the API and underlying service.

Happy coding!


Chris Ramsdale has worked extensively in the mobile space, starting as a Software Engineer at Motorola in 1997, and then joining local start ups as a Tech Lead and Product Manager. Chris is currently a Product Manager for Google Cloud Platform focused on developer tools and platform services like Google App Engine and Google Cloud Datastore.

Posted by Scott Knaster, Editor