Pregunta

Quiero enviar referencias únicas para el cliente para que el cliente puede hacer referencia a objetos específicos. Las llaves codificadas appengine ofrece son a veces 50 bytes de longitud, y probablemente sólo se necesitan dos o tres bytes (lo que podría esperar a la necesidad cuatro o cinco, pero eso no va a ser por un tiempo!).

El envío de las teclas más grandes en realidad es prohibitivamente caro, ya que podría estar enviando 400 referencias a la vez.

Por lo tanto, quiero un mapa de estas claves largas de teclas mucho más cortos. Una solución obvia es la de almacenar una asignación en el almacén de datos, pero luego, cuando estoy enviando 400 objetos que estoy haciendo 400 consultas adicionales, ¿verdad? Tal vez yo mitigar el gasto manteniendo copias de las asignaciones en Memcache también. ¿Hay una mejor manera?

¿Puedo simplemente un tirón el número de las claves sin codificar que appengine crea y usar eso? Yo sólo lo necesario Identificación del que utilizo para ser únicas por tipo de entidad, no a través de toda la aplicación.

Gracias,

Riley

¿Fue útil?

Solución

teclas

almacén de datos incluyen información adicional que no es necesario - como el ID de aplicación. Por lo que definitivamente no es necesario enviar el toda llaves.

Si estas referencias son de un tipo particular en su almacén de datos, entonces usted puede hacer aún mejor y acaba de enviar el nombre_tecla o ID numérico (el que usan las llaves). Si éste es el caso, entonces se podría transmitir cada tecla con sólo unos pocos bytes (se puede optar por cualquiera de una variable de longitud o de longitud fija de codificación de enteros en función de lo que sería más compacta para su caso específico [probablemente la antigua hasta la mayoría de las identificaciones que está enviando llegar a ser muy grande]).

Cuando reciba estas claves parciales de vuelta desde el usuario, que debe ser fácil de reconstruir la clave completa que necesita para recuperar las entidades del almacén de datos. Si está utilizando el tiempo de ejecución de Python, se puede usar db.Key.from_path(kind_name, numeric_id_or_key_name) .

Un esquema como este debería ser a la vez más simple y (mucho) más rápido que tratar de utilizar el almacén de datos / memcache para almacenar una asignación personalizada.

Otros consejos

no es necesario un mecanismo de asignación personalizada. Sólo los nombres de uso clave de entidad para almacenar el identificador corto:

entity = MyKind(key_name=your_short_id)
entity.put()

A continuación, puede recuperar estos cortos identitiers en una consulta:

keys = MyKind.all(keys_only=True).filter(...).fetch(400)
short_ids = [key.name() for key in keys]

Por último, el uso MyKind.get_by_key_name(short_id) con el fin de recuperar entidades de identificadores enviado de vuelta por sus usuarios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top