Чрезмерное хранилище данных пишет при создании - PullRequest
0 голосов
/ 30 марта 2012

Привет задал вопрос по этому вопросу вчера, а теперь упростил задачу, чтобы выяснить, облегчает ли ее решение / диагностику.

Я пытаюсь массово создать 500 сущностей JDO, каждая сущность имеет «Ключ» в качестве первичного ключа, две индексированные строки и одну неиндексированную строку.

Когда я создаю 500 сущностей, он использует 6% квоты записи хранилища данных (из квоты 500000), что составляет 30000 операций записи, что соответствует 60 операциям записи на одну сущность. На сервере разработки «write ops» равно 6, что согласуется с различными комментариями, сделанными в отношении записей в хранилище данных. Нет поиска и составных индексов, я просто создаю 500 сущностей.

Так почему мои сущности берут 60? Сущность JDO выглядит следующим образом:

import javax.jdo.annotations.Extension;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

import com.google.appengine.api.datastore.Key;

@PersistenceCapable
public class Product {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
    @Persistent
    private String productId;
    @Persistent
    private String productName;

    @Persistent
    @Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
    private String merchantProductId;   

      .
      .// getters and setters here but not included in post
      .
}

500 объектов создаются в цикле:

private void createBulkProducts(PrintWriter out){
    int cnt = 0;
    Product tmpProd = null;
    PersistenceManager pm = PMF.get().getPersistenceManager();
    ArrayList<Product> products = new ArrayList<Product>();
    for(cnt = 0; cnt < 500; cnt++){
        tmpProd = createBulkProduct(new Integer(cnt).toString());
        products.add(tmpProd);
    }
    if(products.isEmpty() == false){
        pm.makePersistentAll(products);
        out.println(products.size() + " bulk products committed to database");
    }
    pm.close();
    out.println(cnt + " bulk products inserted");           
}

private Product createBulkProduct(String cnt){
    Product product = new Product();
    product.setMerchantProductId("mid" + cnt);
    product.setProductId("pid" + cnt);
    product.setProductName("the quick brown fox jumps over the lazy dog " + cnt);
    return product;
}

Я работаю на GAE 1.6.1

Вся помощь / предложения с благодарностью Craig

1 Ответ

1 голос
/ 30 марта 2012

Ежедневная квота для бесплатных приложений составляет 50 тыс. Операций записи, а не 500 тыс.Посмотрите на свою панель инструментов, где должно быть написано n.nn of 0.05 Million Ops.

Примите это во внимание, что все расчеты в порядке.

...