It means you can do 5 writes per second for 1 entity group. Say you have 1000 entities in 1 entity group, you can update each of them in a transaction, and do this transaction at most 5 times/sec. But most time you may just update 1 or 2 entities, and it's also no more than 5 times/sec. And if the 1000 entities are not in entity groups, you can update each of them for 5 times/sec.
So don't use big entity group, break it to make sure no 2 user will write to 1 entity group at the same time. 2009/12/3 Tim Cooper <[email protected]>: > Thanks, Dominik, but I still need to know more - (I understand that > the "1-10 updates per second" is only per entity group so scaleability > comes with having fine-grained entity groups). > > * What is an "update" exactly? Is it a call to "pm.makePersistent > ()"? Is it a call to "tx.commit()"? Is it a call to "pm.flush()"? > Is it an update of a single field in a single Java object? Is it an > invocation of "doGet()/doPost()"? > > * Suppose you want to do multiple updates within the one entity group > within a single Java function. At what point is the 100ms cost > incurred? Which function call blocks for the 100ms? > > * Is it possible to create 900 child entities in an entity group in a > single Java function call, by structuring this "creation of 900 > objects" as a single "update"? > > * If I don't use transactions, does this "1-10 updates per second" > limitation go away? > > I have written an application which uses a single page request to send > an XML document consisting of 900 objects to my GAE app. My GAE app > then puts this list of 900 items into the datastore in a single entity > group. I am happy with the limitation that only 1-10 people can do > this to the same entity group per second. What I'm not entirely happy > about is that the call fails because it hits the 30 second timeout. I > don't want the timeout increased, I want the page request to be > processed quicker. If all this activity is happening within the one > Java function call, without commit()'s or pm.flush()'s inside the > loop, then shouldn't this be regarded as a single "update"? > > It may be relevant to explain the data model: the head object has a > field: "ArrayList<Student> Students". It's set up as an owned, > bijectional one-to-many relationship, using the annotations described > in the GAE documentation. > I'm able to process 400 of these objects in 20 seconds...i.e. 20 per > second. As mentioned elsewhere, the amount of data involved is small, > ~ 300K and there's only one index involved. This is the sort of thing > that would be processed instantaneously in other technologies. > > > > On Dec 3, 3:29 pm, Dominik Steiner <[email protected]> > wrote: >> Tim, >> >> you might find some information related to that in this thread >> >> http://groups.google.com/group/google-appengine-java/browse_thread/th... >> >> HTH >> >> Dominik >> >> On 1 Dez., 23:42, Tim Cooper <[email protected]> wrote: >> >> >> >> > Can anyone give me a clearer understanding of what an "update" is, in >> > the statement: "Any single entity or entity group can only be updated >> > about five times a second." >> >> > What level is an "update"? Is it a single update to a single field? >> > Is it a set of field updates to a single Java object? Is it a single >> > transaction, updating a single entity group? >> >> > I have written my application expecting a "update" to mean a set of >> > updates to a single entity group. In one XML request, I am populating >> > my datastore with 900 child entities, all within a single entity >> > group. The total amount of data involved is about 300K. I thought >> > that this size would be quite manageable for AppEngine, and I wanted >> > transactions to be atomic. However, it appears that this means 900 >> > writes and so this call times out. >> >> > The frustrating thing was that my application worked perfectly in the >> > development environment. I thought that that was a good indication >> > that it would work when deployed. It has been difficult to debug it >> > using frequent "deploy"s. > > -- > > 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. > > > -- 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.
