Incrementar uso de memcache para DB

Revisando código, he visto como el datastore de App Engine utiliza la memcache para agilizar tareas y la velocidad de respuesta al cliente. He encontrado un manual verdadereamente interesante que permite modificar el uso por defecto de la memcache para DB Model e incrementar la velocidad de respuesta hasta en 3 veces.

No he podido realizar aún pruebas para el nuevo API NDB Model pero los resultados en DB prometen mucho. Básicamente se trata de utilizar la librería marshal en lugar de cPickle.

Para el que no esté al tanto de lo que son estas dos librerías, se utilizan para serialización de objetos python.

Los dos problemas básicos que tiene cPickle son:

  1. Es muy lento.
  2. La salida que devuelve es muy grande comparado con marshal.

El único inconveniente hasta la fecha es que marshal no permite serializar objetos que no sean objetos nativos de Python por lo que antes de hacer este pequeño truco deberás convertir tus entities a objetos puros de Python.

class User(db.Model):
  email = db.StringProperty()
  birthdate = db.DateProperty()
  status = db.StringProperty()

def memcachePut(user):
  array = [ user.email,
            time.mktime(user.birthdate.timetuple()),
            user.status ]
  memcache.puts(user.key().name(), marshal.dumps(array))

def memcacheGet(key_name):
  string = memcache.gets(key_name)
  if string:
    array = marshal.loads(string)
    return User(key_name=key_name,
                email=array[0],
                birthdate=datetime.datetime.fromtimestamp(array[1]),
                status=array[2])

Este cambio te permitrá incrementar por 3 las operaciones de memcache.

Link:


 Google+

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s