Al almacenar y recuperar una entidad del almacén de datos que contiene una lista de tuplas, ¿cuál es la forma más eficiente de almacenar esta lista?¿Cuál es la forma más eficaz de almacenar una lista de Tuples en App-Engine?
Cuando he encontrado este problema, las tuplas pueden ser cualquier cosa, desde pares de valores clave hasta una fecha y resultados de muestra, hasta las coordenadas (x, y).
El número de tuplas es variable y varía de 1 a unos pocos cientos.
La entidad que contiene estas tuplas, necesitaría una referencia rápida/económica, y los valores de tupla no necesitan ser indexados.
He tenido este problema varias veces y lo he resuelto de diferentes maneras.
Método 1:
convertir los valores de tupla en una cadena y concatenar junto con algunos delimitador.
def PutEntity(entity, tuples):
entity.tuples = ['_'.join(tuple) for tuple in tuples]
entity.put()
Ventajas: Los resultados son fáciles de leer en el Visor de almacén de datos, todo está recogen en un GET. Desventajas: Pérdida de precisión potencial, programador requerido para deserializar/serializar, se requieren más bytes para almacenar datos en formato de cadena.
Método 2:
tienda cada valor tupla en una lista y zip/descomprimir la tupla.
def PutEntity(entity, tuples):
entity.keys = [tuple[0] for tuple in tuples]
entity.values = [tuple[1] for tuple in tuples]
entity.put()
Ventajas: Sin pérdida de precisión, confuso, pero todavía es posible ver los datos en el almacén de datos espectador, capaz de imponer tipos, todo se recogen en un GET.
Desventaja: programador necesita comprimir/descomprimir las tuplas o mantener cuidadosamente el orden en las listas.
Método 3:
serializar la lista de tuplas en algunos JSON Manor, salmuera, tampones de protocolo y lo almacenan en una burbuja de texto o propiedad.
Ventajas: Utilizable con objetos, y objetos más complejos, menos riesgo de que falle un error que coincida con los valores de tupla.
Desventajas: El acceso a la tienda de Blob requiere y recuperación adicional ?, no se pueden ver los datos en el Visor de Datastore.
Método 4:
tienda de las tuplas en otra entidad y mantener una lista de las teclas.
Ventajas: Arquitectura más obvia. Si la entidad es una vista, ya no necesitamos guardar dos copias de los datos de la tupla.
Desventajas: Dos búsquedas requieren una para la entidad y la lista de claves y una para las tuplas.
Me pregunto si alguien sabe cuál funciona mejor y si hay alguna manera en que no haya pensado.
Gracias, Jim
Tiendo a utilizar el método 3 con PickleProperty pero a veces no tener la opción de ver la entidad a través del Datastore Viewer puede ser doloroso. – systempuntoout