Descargar entidades del motor de aplicaciones de Google como CSV

En nuestra aplicación GAE, los usuarios a menudo necesitan descargar entidades de un tipo particular como CSV. Con frecuencia se agregan o actualizan nuevas entidades, lo que hace que no sea factible escribir todas las entidades en un blob por adelantado o en intervalos fijos.

Para alrededor de 50000 2 entidades (cada entidad < 500 KB) recuperadas en lotes de 2, se tarda más de 1 minutos en escribir en un blob de archivo CSV y cuesta casi $5. Además, los usuarios tienen que esperar mucho tiempo para recibir un archivo que, por lo general, tiene solo unos pocos (< XNUMX) MB.

Tengo preguntas 2:

A) ¿Se puede reducir el tiempo para escribir el blob configurando una canalización de reducción de mapa para la exportación?

B) ¿Hay alguna manera de reducir el costo de obtener una gran cantidad de entidades del almacén de datos y escribir en blobs?

Editar: Acabo de enterarme de que mapreduce solo puede ejecutarse en todas las entidades de un tipo, no en un subconjunto filtrado. Por lo tanto, mapreduce probablemente aumentará mucho el costo. ¿Cualquier otra sugerencia?

preguntado el 02 de julio de 12 a las 15:07

1 Respuestas

  1. Deberías usar ACanalización de ppEngine puede mejorar la velocidad porque distribuirá el trabajo en varias instancias.
  2. Puede reducir el costo de obtener entidades mediante el uso de consultas de proyección en las que especifica qué atributos desea obtener.
  3. En cuanto a la velocidad de descarga, ¿estás usando el almacén de blob con BlobstoreDownloadHandler?

Respondido 02 Jul 12, 15:07

Shay, gracias. ¿Qué pasa si necesitamos buscar siempre todas las propiedades de cada entidad? ¿Alguna estrategia de reducción de costos allí? - Yasser

@Yasser Sonará feo, pero puede almacenar la línea csv como un atributo de la entidad y actualizarla cada vez que se crea/actualiza la entidad. obtener solo la línea al recuperar la entidad. Creo que debería costar menos que recuperar todos los atributos. - Shay Erlichmen

Shay, un factor que complica su sugerencia de "almacenar la línea" es que las consultas de proyección no son compatibles con atributos no indexados. Por lo tanto, Yasser debería tener cuidado de mantenerse por debajo de los límites de str (500 caracteres) y pagar los costos de escritura adicionales asociados con otra propiedad indexada. - jeffrey_t_b

Sí, estoy usando el controlador dl de blobstore, pero la descarga real no es el cuello de botella. Está creando un blob a partir de las entradas del almacén de datos que es problemático: Yasser

Ah, y jeffrey tiene razón, no hay forma de que pueda permanecer por debajo del límite de 500 caracteres. El tamaño promedio de mi entidad es de alrededor de 2 KB sin procesar. - Yasser

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.