What is your app id? Do you have a large number of indexes defined for this entity kind?
FYI, it's certainly a good idea to optimize for performance, but I wouldn't worry too much about the particular point at which warnings appear in the request logs. These are just guidelines to let you know which requests are consuming the most CPU. If you're only planning to update these entities on a fraction of your requests then the overall CPU cost should not be too high. However, if your application is doing a lot of writes then by all means, try to optimize this (e.g. by reducing the number of indexes, or perhaps by reducing the number of columns if you don't query them independently). On Fri, Aug 21, 2009 at 6:55 AM, sree <[email protected]> wrote: > > In a test app I have created, I am able to insert only 2 rows per > request (for 1 entity with 10 properties only) into the datastore by > using low-level api without getting any warnings for cpu_ms / > api_cpu_ms usage. > > However if I try to insert 3 rows or more (again only 1 entity being > inserted), the cpu gets used for more than 1s thereby generating a > warning or error from GAE. > > Stats from GAE log: > > For inserting 2 records -> /insert.do 200 77ms 655cpu_ms 643api_cpu_ms > (everything ok) > > For inserting 3 records -> /insert.do 200 134ms 979cpu_ms > 964api_cpu_ms (yellow warning) > > For inserting 10 records -> /insert.do 200 178ms 3249cpu_ms > 3216api_cpu_ms (red warning) > > How to optimize the ‘cpu_ms and api_cpu_ms’ usage? Can GAE perform > only as many operations as 2 inserts into datastore if we want to keep > within the warning levels? > > Can you please provide some feedback as to whether I am doing anything > wrong in code or have not used a good practice to achieve better > performance. Thanks in advance. > > Code in servlet (parsing and split operations have been benchmarked > and they are not causing any adverse impact on performance): > > Pattern p1 = Pattern.compile(","); // created as servlet instance > variable > > public void doPost(HttpServletRequest req, HttpServletResponse res) > throws ServletException, IOException > { > try { > > DatastoreService datastore = > DatastoreServiceFactory.getDatastoreService(); > List<Entity> entity = new ArrayList<Entity>(); > > for (int i = 0; i < n; i++) { > > String[] record = > p1.split("1,tester,1.0,1.0,1.0,1.0,1.0,1.0"); > > data1 = Long.parseLong(record[0]); > data2 = record[1]; > data3 = Double.parseDouble(record[2]); > data4 = Double.parseDouble(record[3]); > data5 = Double.parseDouble(record[4]); > data6 = Double.parseDouble(record[5]); > data7 = Double.parseDouble(record[6]); > data8 = Float.parseFloat(record[7]); > > Entity e = new > Entity(DetailsBean.class.getSimpleName()); > e.setProperty("column1", i); > e.setProperty("column2", data2); > e.setProperty("column3", i + data3); > e.setProperty("column4", i + data4); > e.setProperty("column5", i + data5); > e.setProperty("column6", i + data6); > e.setProperty("column7", i + data7); > e.setProperty("column8", i + data8); > e.setProperty("crDate", new Date()); > e.setProperty("modDate", new Date()); > > entity.add(e); > > } > > datastore.put(entity); > > } catch (Exception e) { > e.printStackTrace(); > } finally { > persistenceManager.close(); > } > } > > Entity bean code: > > package com.pojo; > > import java.io.Serializable; > import java.util.Date; > import java.util.List; > > import javax.jdo.annotations.IdGeneratorStrategy; > import javax.jdo.annotations.IdentityType; > import javax.jdo.annotations.NotPersistent; > import javax.jdo.annotations.PersistenceCapable; > import javax.jdo.annotations.Persistent; > import javax.jdo.annotations.PrimaryKey; > > @PersistenceCapable(identityType = IdentityType.APPLICATION) > public class DetailsBean implements Serializable { > > private static final long serialVersionUID = 1L; > > @PrimaryKey > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > private Long slno; > > @Persistent > private long column1; > > @Persistent > private String column2; > > @Persistent > private double column3; > > @Persistent > private double column4; > > @Persistent > private double column5; > > @Persistent > private float column6; > > @Persistent > private double column7; > > @Persistent > private double column8; > > @Persistent > private Date crDate; > > @Persistent > private Date modDate; > > @NotPersistent > private String message; > > @NotPersistent > private int n; > > @NotPersistent > private long offset; > > @NotPersistent > private long range; > > @NotPersistent > private List data; > > > public DetailsBean() { > > } > > public DetailsBean(long v1, String v2, double v3, double v4, double > v5, > float v6, > double v7, double v8) { > this.column1 = v1; > this.column2 = v2; > this.column3 = v3; > this.column4 = v4; > this.column5 = v5; > this.column6 = v6; > this.column7 = v7; > this.column8 = v8; > Date now = new Date(); > this.crDate = now; > this.modDate = now; > } > > public Long getSlno() { > return slno; > } > > public void setSlno(Long slno) { > this.slno = slno; > } > > public long getColumn1() { > return column1; > } > > public void setColumn1(long column1) { > this.column1 = column1; > } > > public String getColumn2() { > return column2; > } > > public void setColumn2(String column2) { > this.column2 = column2; > } > > public double getColumn3() { > return column3; > } > > public void setColumn3(double column3) { > this.column3 = column3; > } > > public double getColumn4() { > return column4; > } > > public void setColumn4(double column4) { > this.column4 = column4; > } > > public double getColumn5() { > return column5; > } > > public void setColumn5(double column5) { > this.column5 = column5; > } > > public float getColumn6() { > return column6; > } > > public void setColumn6(float column6) { > this.column6 = column6; > } > > public double getColumn7() { > return column7; > } > > public void setColumn7(double column7) { > this.column7 = column7; > } > > public double getColumn8() { > return column8; > } > > public void setColumn8(double column8) { > this.column8 = column8; > } > > public Date getCrDate() { > return crDate; > } > > public void setCrDate(Date crDate) { > this.crDate = crDate; > } > > public Date getModDate() { > return modDate; > } > > public void setModDate(Date modDate) { > this.modDate = modDate; > } > > public String getMessage() { > return message; > } > > public void setMessage(String message) { > this.message = message; > } > > public int getN() { > return n; > } > > public void setN(int n) { > this.n = n; > } > > public long getOffset() { > return offset; > } > > public void setOffset(long offset) { > this.offset = offset; > } > > public long getRange() { > return range; > } > > public void setRange(long range) { > this.range = range; > } > > public List getData() { > return data; > } > > public void setData(List data) { > this.data = data; > } > } > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en -~----------~----~----~----~------~----~------~--~---
