2011-11-13 10 views
9

Desde que GAE fue al modelo de fijación de precios al inicio de la semana pasada, he estado luchando por exceder mi cuota de operaciones de lectura y escritura en el almacén de datos. No estoy seguro de si Google cuenta todas las actualizaciones para un escritor como una sola escritura o si cada actualización de la columna se cuenta como una escritura independiente.¿Qué clasifica Google como operación de escritura del almacén de datos en Google App Engine?

Si esto último es cierto que podría conseguir alrededor de esto por tener una función de actualización para actualizar las 6 columnas en los parámetros o haga yo también cobran por 6 actualizaciones?

Aquí está mi código existente, que se utiliza para actualizar la puntuación de un jugador (calificación) y los demás detalles al mismo tiempo. En este momento, siempre llevo el nombre, el correo electrónico, la calificación, el won, el juego y los logros con los valores del cliente. Una solución puede ser enviarlos solo desde el lado del cliente cuando hayan cambiado de valor.

Long key = Long.valueOf(updateIdStr); 
System.out.println("Key to update: " + key); 
PlayerPersistentData ppd =null; 
try { 
    ppd = pm.getObjectById(
    PlayerPersistentData.class, key); 
// for all of these, make sure we actually got a value via 
// the query variables 
    if (name != null && name.length() > 0) { 
     ppd.setName(name); 
} 

if (ratingStr != null && ratingStr.length() > 0) { 
    ppd.setRating(rating); 
} 

if (playedStr != null && playedStr.length() > 0) { 
    ppd.setPlayed(played); 
} 

if (wonStr != null && wonStr.length() > 0) { 
    ppd.setWon(won); 
} 

if (encryptedAchievements != null 
    && encryptedAchievements.length() > 0) { 
    ppd.setAchievements(achievements); 
} 

if (email != null & email.length() > 0) { 
    ppd.setEmail(email); 
} 

resp.getWriter().print(key); 
} catch (JDOObjectNotFoundException e) { 
    resp.getWriter().print(-1); 
} 
     } 
+0

He visto la documentación de la aplicación Google y parece que una operación de escritura es 1 Escritura + 4 escrituras por valor de propiedad indexada modificada + 2 escrituras por valor de índice compuesto modificado. Dado que acabo de poner un nuevo índice compuesto en la calificación, achievementsCount (un recuento desnormalizado de los logros establecidos) esta semana, supongo que es la causa del aumento repentino en "escrituras". Si esto significa que me cobrarán 1 + 4 + 2 por cada calificación de write on y achievementsCount o 1 + 4 + 4 + (2?) No estoy seguro. –

+0

Llamar a set() en pocas propiedades es poco probable que ayude: el Datastore lee y escribe entidades enteras, no columnas individuales. Si tiene suerte, el almacén de datos puede evitar realizar las actualizaciones de índice innecesarias (la manera más fácil de hacerlo es ejecutar algunas pruebas). Sin embargo, la solución más simple es hacer que algunas propiedades no estén indexadas, si es que no necesita consultarlas. –

Respuesta

17

El número de escrituras que se le cobran depende de su entidad. En general, se le cobrará por 1 escritura para la entidad y 1 por cada actualización del índice. Cada propiedad indexada se incluye en los índices de propiedad individual ascendente y descendente, por lo que hay un mínimo de 2 escrituras por entidad indexada, más cualquier escritura para índices compuestos (definidos por el usuario).

Al actualizar una entidad existente, se le cobra por el diff de los antiguos índices y los nuevos. Por lo tanto, si modifica una propiedad, se le cobrará por la escritura de la entidad, más 4 escrituras por propiedad (borrando el valor anterior e insertando la nueva) para los índices incorporados, y también para cualquier índice compuesto.

+0

Entonces, básicamente, ¿debería cambiar mi interfaz para actualizar solo los valores que realmente han cambiado en lugar de actualizar todo de una vez sin preocuparse por si el valor ha cambiado o no? –

+1

@BarryIrvine El almacén de datos solo le cobra por cosas que han cambiado; si configura algo con el mismo valor que en la actualidad, no se le cobrará por una actualización en esa columna. –

+0

Lástima :(Tenía la esperanza de que podría reducir la cantidad que me cobraron por escribir. Parece que podría necesitar arar algunos de mis ingresos publicitarios pequeños de nuevo en el GAE. –

2

Tenga en cuenta los cambios en la estructura de precios que entran en efecto 1 ª de julio de, el año 2016 al pasar deper operation a per entity. Esto cambia la forma en que piensas escribir de manera eficiente (en función de los costos) en Datastore.

New Cloud Datastore Pricing Starting July 1st, 2016

El 1 de julio de 2016, Google Cloud almacén de datos de precios cambiará de carga por operación de carga por entidad. Este precio mucho más simple significa que costará mucho menos usar toda la potencia de Google Cloud Datastore.

Por ejemplo, en el precio actual, escribir una nueva entidad con 1 propiedad indexada costaría 4 operaciones de escritura. En el nuevo precio, costaría solo 1 entidad de escritura. Del mismo modo, la supresión de esta entidad en el precio actual costaría 4 operaciones de escritura, pero en la nueva fijación de precios que costaría sólo el 1 entidad borrar.

+0

no lo sé, ¡gracias! ! –

Cuestiones relacionadas