Last Wednesday, the App Engine team hosted the latest session of its
bimonthly IRC office hours. A transcript of the session and a summary
of the topics covered is provided below. The next session will take
place next Wednesday, January 20th from 9:00-10:00 a.m. PST in the
#appengine channel on irc.freenode.net.

- Jason

--SUMMARY-----------------------------------------------------------
- Q: Is there any work underway to speed up the index building
process? A: Indexes do not take a set amount of time to build; rather,
the building duration is dependent in part on the amount of traffic
hitting the cluster and the number of other applications that are
building indexes during the same period. But we're always making
optimizations where we can to make it as efficient as possible.
[7:01-7:02, 7:05-7:07, 7:10-7:11, 7:22, 7:24, 7:26, 7:29-7:30, 7:32]

- Q: What is the best way to do aggregate reporting on App Engine
data? A: Trying to retrieve and then store all data in memory is not a
scalable approach -- it may work for small datasets but will increase
latency and start to fail as the size of the data grows. Ultimately
App Engine's datastore is not built for this type of data mining. If
you can't find any reasonable way to split the data into smaller
chunks which can be processed individually and aggregated using the
task queue API, you may consider downloading the data using the bulk
download utility and doing the data mining and report generation on
your local box. [7:13-7:20]

- Q: What should be done in order to ensure an application performs
well when it scales from several users to many hundreds or thousands?
A: If you expect your application to receive a lot of requests, you
should first perform a load test with the expected amount of traffic
before deploying; all billing-enabled apps can handle up to 500 QPS
and you can request higher quota if necessary. You can determine how
well your application will function by using a load testing utility to
ramp up traffic from 0 to the expected level and hold this level for a
period. Inspect your "Number of Quota Denials/Second" graph (should be
a steady 0) and "Milliseconds/Request" (latency) graph to guage
whether any changes need to be made before you go live. [7:25-7:27,
7:30]

- Q: In lieu of a true multi-tenant solution, what's the best way to
model data for an application that will be used by multiple clients/
customers? A: This depends on the specific needs of your customers and
the size of your application. If you want to use a single application
ID, you can either separate your kinds by client (e.g.
Users_customer1, Users_customer2) or just use a single kind (Users)
with an extra property indicating which client that entity is
associated with. For larger applications, you may consider deploying a
new application per client, but first you'll need to request an
exemption to clause 4.4 of the App Engine TOS using the form at
http://code.google.com/support/bin/request.py?contact_type=AppEngineMultiInstanceExceptionRequest.
[7:32, 7:34-7:35, 7:39-7:40]

- Discussion on HTTPS support for non-appspot.com domains [7:37, 7:39,
7:43-7:44]

- Q: What's the best way to extend the list of accepted property
types, e.g. adding a decimal data type? A: Check these resources:
http://googleappengine.blogspot.com/2009/07/writing-custom-property-classes.html
and http://www.redredred.com.au/money-database-property-for-google-app-engine/
[7:45, 7:49-7:50]

- Q: What kind of write load can App Engine handle? A: You should
model your data so as to avoid writing to the same entity or entity
group more than once per second on average, but the write throughput
to distinct entity groups is high enough that most developers
shouldn't need to worry. For more on avoiding datastore contention
which can limit write throughput, see 
http://code.google.com/appengine/articles/scaling/contention.html
[7:50, 7:52, 7:54-7:55, 7:58, 8:00-8:01]

- Discussion of the "preview release" designation; note that apart
from the "preview release" status, App Engine has graduated from
Google Code Labs and thus any kind of formal turndown wouldn't take
place until 3 years past any deprecation announcement. Therefore,
should App Engine be deprecated in the future, which isn't planned,
hosted apps won't suddenly be disabled. [7:50-7:54]


--FULL TRANSCRIPT---------------------------------------------------
[7:00pm] daskalou: Let's begin...
[7:01pm] Jason_Google: Hi Everyone. Welcome to the first Chat Time of
the new year! I'll be here for the next hour to answer any App Engine
questions.
[7:01pm] daskalou: Do I have the correct time? Is it 7PM PST now?
[7:01pm] daskalou: sweet
[7:01pm] Jason_Google: Yes indeed.
[7:01pm] daskalou: Q: Any plans on speeding up index building?
[7:02pm] Jason_Google: Index building is always something we're
working on, optimizing the work of the index task workers and so
forth. I don't know of any specific measures being done right now,
only that optimizations are added every few releases or so that should
help. What kind of index building delays are you experiencing?
[7:05pm] daskalou: Currently, I am not, I've just been reading all the
complaints about it
[7:06pm] daskalou: Q: Can we get a more defined window of time that an
app is kept in the app cache?
[7:06pm] chilts: Jason_Google: you know how Google Labs Short Link
service has a config page in the Google Apps interface, is there any
way we can do that with an AppEngine service?
[7:07pm] chilts: ie. 
https://www.google.com/a/cpanel/example.org/LabServiceSettings?appId=shortlinks
[7:07pm] Jason_Google: Currently, as far as I know, index building is
dependent on the size of the data of the apps with indexes also being
built, so indexes do occasionally take longer to build when larger
apps are also having their indexes built -- there's only a limited
number of index workers that run. But like I said, we're continually
looking into ways of optimizing.
[7:07pm] ryan_google: daskalou: good q. unfortunately no, not really.
it depends on overall cluster-wide traffic weather and patterns; it's
not a fixed period of time.
[7:08pm] SnapABug: Q: Is there a way using the XMPP service to send
XMPP  states such as <COMPOSING/>, <PAUSED/>, <INACTIVE/> etc...
[7:09pm] SnapABug: (using Java)
[7:09pm] ryan_google: SnapABug: i don't know that there are any xmpp
experts here, but i expect the answer is no
[7:10pm] Jason_Google: chilts: I haven't looked into the Google Labs
Short Link service actually. I need to explore it a bit more before I
can answer your question fully. But can you go into more detail about
what you're looking for, e.g. a way of creating short links for App
Engine apps running on a certain Google Apps domain?
[7:10pm] Wesley_google: also as i understand it, it's about how many
"units of work" are required to build your indices, regardless of
size. if you use up your internal "quota" of resources necessary to
build all your indices, then it will  "pause" until there is some
quota available
[7:10pm] SnapABug: OK. I could only find ways to update the <BODY>.
That's what I was afraid of.
[7:10pm] SnapABug: Thanks
[7:10pm] ryan_google: SnapABug: feel free to file a feature request!
[7:10pm] SnapABug: Will do.
[7:10pm] chilts: Jason_Google: yep, I can see that I can configure my
AppEngine app at but it's only the web address and 'Disable':
https://www.google.com/a/cpanel/chilts.org/AppEngineServiceSettings?appId=website-chilts-org
[7:11pm] chilts: I was wondering if I can do other config there ...
e.g. what colour do you want your CSS (or proper admin questions)
[7:11pm] Wesley_google: this will make it *seem* like it's taking a
long time to build your indices but in reality, they're paused on
purpose
[7:12pm] chilts: for example it has a link to further settings on the
app itself
[7:12pm] Jason_Google: chilts: I see. I believe the customization
options are limited for App Engine apps but this is something we're
looking to improve significantly in the coming year. Please file a
feature request for specific options you'd like to see and we'll
forward those along to the proper teams.
[7:12pm] stephan__: newbie q: what's the protocol here? ask away, or
get in line somehow?
[7:12pm] chilts: hmm, maybe I just do that and have the settings in
the app itself
[7:12pm] chilts: Jason_Google: thanks ... I will
[7:12pm] Jason_Google: stephan__: Ask away!
[7:13pm] chilts: I guess I meant app config and maybe I just do that
in the app itself ... thought there was more to the Google Labs ones
[7:13pm] stephan__: ok then... here's my catch 22 - i need to do
aggregate reporting on data. queries don't support aggregate clauses,
so my solution is to pull things into memory and query using josql.
[7:13pm] Jason_Google: chilts: Currently, I believe you have to do it
in the app itself, but we may be able to add more options down the
line, so your specific ideas may help there.
[7:14pm] chilts: awesome
[7:14pm] ryan_google: stephan__: the short answer is that the app
engine datastore isn't designed for reporting, data mining, business
intelligence, ad hoc queries, etc
[7:14pm] ryan_google: pulling data into memory will work but only with
small datasets
[7:15pm] stephan__: so far so good. but.. (1) because of the 30 second
limit, i need to do this in batches -- querying the data store in
sets. but.. (2) sometimes GAE will spin up a new JVM, meaning
everything i've build up in memory is no longer there, so i have to
start over.
[7:15pm] ryan_google: right. basically, don't expect much success with
that approach.
[7:15pm] ryan_google: generally we'd encourage you to d/l the data
with eg. the bulk loader, put it into a data warehouse, and do the
data mining and reports there
[7:15pm] stephan__: all i would need, however, is a way to keep a
user's session sticky to a given jvm
[7:16pm] ryan_google: right. one approach would be to let users "kick
off" a report, add a task to a task queue, split up the work into
manageable chunks, give each chunk to a task, then collect the results
and compile them and mark the report as ready to view
[7:17pm] ryan_google: and provide a reports page that shows in
progress and completed reports
[7:17pm] stephan__: but i still need for all the data to be in the
memory of one jvm at some point. if i use task queus, that's a sure
fire way to cause a lot more jvms to spin up
[7:18pm] ryan_google: true. again, you'd need to be able to split up
the data into chunks. if you really can't do that, honestly your only
option is probably to d/l it all and process it offline.
[7:18pm] ryan_google: i'd be surprised if you couldn't shard it
though, mapreduce style
[7:19pm] ryan_google: btw we're working on support for aggregate data
processing. it'll be mapreduce style, not sql query style, but it'll
still be something.
[7:19pm] stephan__: perhaps. are their any plans to support any sort
of batch mode where a given process can run for more than 30 seconds?
[7:19pm] stephan__: i'd pay for this, as i'm sure others would as well
[7:19pm] ryan_google: that'd help you, but soon after that you'd run
into the memory limit
[7:20pm] ryan_google: honestly for most nontrivial datasets, you'll
hit the limit of memory on a given machine pretty quickly
[7:20pm] salsakran: ryan: is there a timeframe for map/reduce queries
on the datastore?
[7:20pm] ryan_google: even if you use your own machine
[7:20pm] stephan__: ya, i'm slowly coming to that conclusion,
unfortunately. disapointing however...
[7:21pm] ryan_google: salsakran: sorry, no. ETAs for software more
than, say, 6 months out tend to be kind of meaningless anyway (imho).
we tend to use agile processes, so we have a rough idea, but nothing
very precise or far out.
[7:21pm] salsakran: heh. so > 6 months?
[7:21pm] Wesley_google: "maybe"
[7:22pm] ryan_google: salsakran: we don't know.
[7:22pm] stephan__: fwiw, i'm a product manager at salesforce.com, so
i understand why these limits need to be enforced to "protect the
server" for everyone else. still, you should be thinking about some
kind of server poll for batch operations in a way that wouldn't impact
other people. as i said, this is something i'm sure people would pay
for.
[7:22pm] stephan__: server POOL i meant
[7:22pm] ryan_google: it's on the roadmap, though,
http://code.google.com/appengine/docs/roadmap.html , which is a strong
sign that we're prioritizing it and hope to get it out soon.
[7:22pm] daskalou: Wesley_google: re: index building and using up your
"index building quota" - how big is this quota?
[7:23pm] salsakran: ryan_google: ahh ... so that's  what "Support for
mapping operations across datasets" meant
[7:23pm] ryan_google: stephan: we definitely are! it just sounds like
it will be a very different model from what you're asking for, where
you load the entire data set into memory. we make sure that anything
we build scales, and that doesn't really.
[7:23pm] Wesley_google: stephan__: can't you do the same thing with
force.com?
[7:24pm] Wesley_google: daskalou: this is an internal number that i'm
not aware of, but just know that there is a built-in limitation in
there, so if things seem like they're taking too long, they may be
paused
[7:24pm] SnapABug: Q: We experienced a lot of Datastore Timeout
Exceptions impacting our customers today.
[7:24pm] SnapABug: The status page was at "investigating" earlier but
is  all green now. Do you have an explanation for the Query latency
problem?
[7:25pm] ryan_google: SAB: when?
[7:25pm] stephan__: haha -- i'm a freaking product manager on the
platform. i started a contract gig before i started there that i did
on GAE. interesting, i chose GAE over SF because of portability
concerns -- i know that if it came to it i could take my java code and
run it on a rackspace server if need be. SF seemed like lockin. that
said, i'm now thinking of maybe moving the reporting part to SF, as
the force.com is a lot more mature in that re
[7:25pm] salsakran: what's the current protocol for making sure an app
doesn't get throttled when launched to the public? going from 3-5 devs
hitting it to opening it up to the masses?
[7:26pm] ryan_google:
http://code.google.com/status/appengine/detail/datastore/2010/01/06#ae-trust-detail-datastore-get-latency
does show spikes, but occasional spikes that aren't too high or
widespread do happen
[7:26pm] ryan_google: salsakran: what do you mean by throttled?
[7:26pm] SnapABug: ryan_ggole: starting 12 hours ago.
[7:26pm] daskalou: Wesley_google: If I add 100 new indexes but have an
empty Datastore, my index building times will still have to "wait in
line" due to other apps' indexes being built, even though there my app
has no data in the Datastore?
[7:27pm] SnapABug: The problem peaked about 4 hours ago.
[7:27pm] salsakran: ryan_google: hiting quota and/or having requests
dropped from a sudden spike in traffic
[7:27pm] ryan_google: SAB: how long did they last?
[7:27pm] Jason_Google: salsakran: You're more than welcome to run a
load test before you formally launch your app.
[7:27pm] ryan_google: ah
[7:27pm] salsakran: ryan_google: I recall there being reports of this
before, just wondered what the state of that was
[7:27pm] SnapABug: most of 9 hours.
[7:28pm] ryan_google: SAB: i don't have an answer for your app
specifically. we are working on a few things that will further
increase datastore isolation, though, which could help with things
like this
[7:28pm] ryan_google: do you know roughly what error rate you're
seeing?
[7:28pm] SnapABug: You can see it there too:
http://code.google.com/status/appengine/detail/datastore/2010/01/06#ae-trust-detail-datastore-query-latency
[7:29pm] SnapABug: The error is: Uncaught exception from servlet
com.google.appengine.api.datastore.DatastoreTimeoutException
[7:29pm] ryan_google: fair enough
[7:29pm] ryan_google: i don't have an answer right now, but i'll look
into it
[7:29pm] Wesley_google: daskalou: i don't believe that your index-
building has to "wait in line" behind other apps. your building
requires the same amount of "units of work" regardless of other apps
[7:29pm] SnapABug: ryan_google: Thank you. It is much appreciated.
[7:29pm] Wesley_google: if your datastore is empty, i would imagine
that it shouldn't take long to index your "data"
[7:30pm] ryan_google: salsakran: load testing is always a good idea.
also, you generally want to enable billing if you're at all worried
about quota
[7:30pm] daskalou: Q: When do you guys expect to release (1) Mapping
operations support, and (2) Cursor support? (I know they're on the
roadmap, just wondering "how close" you guys)
[7:30pm] ryan_google: wes is half right. index building isn't strictly
a queue, but it is affected by how many other indices are building at
the same time
[7:30pm] Jason_Google: salsakran: In general, if you're concerned
about a high-scale launch, you should a) enable billing for your app
which automatically increases several key quotas and b) do a load test
at the projected level of QPS to make sure your latency numbers stay
reasonable. This has been a model that other apps have followed with
success in the past.
[7:30pm] daskalou: are*
[7:31pm] daskalou: Wesley_google: ok, thanks
[7:31pm] ryan_google: daskalou: cursors, in either the next release or
the one after that. mapping, see earlier in the conversation. the
answer is we don't know.
[7:31pm] Jason_Google: daskalou: Currently, cursor support is slated
for the next release. You can see references to it in the Javadocs,
etc.
[7:31pm] Jason_Google: Things could always change of course, but it's
coming up soon.
[7:31pm] daskalou: when is the "next release"?
[7:32pm] Wesley_google: yes, ryan, that's what i meant!   jason
mentioned earlier that there are index "workers" and altho there isn't
a queue, their number is finite
[7:32pm] rcopenjr: Hey Guys, I'm new to GAE and appreciate your time
here.  I have a quick question as I begin to
[7:32pm] rcopenjr: design models for the datastore (Python).  I'm
building an application that will host multiple customer
[7:32pm] rcopenjr: who I will need to be able to store data for.  For
example I will have a contact model that will
[7:32pm] rcopenjr: contain person information that will be segregated
by company - Each company owns their own
[7:32pm] rcopenjr: data.  QUESTION:  Given performance constraints is
it better to create separate models for each
[7:32pm] rcopenjr: new customer, i.e. contact_company1,
contact_company2, or one contact model with a property
[7:32pm] rcopenjr: for company?????
[7:32pm] ryan_google: daskalou: soon, probably within a month, but we
don't provide exact ETAs for releases
[7:32pm] salsakran: jason_google: thanks ... that's exactly what I
wanted to know
[7:32pm] daskalou: ryan_google: cool
[7:32pm] Jason_Google: daskalou: Hopefully before the end of the
month. We're shooting for quick releases (usually at least one per
month) if you've been following the release history.
[7:34pm] ryan_google: rcopenjr: we'd need more info. data modelling
q's tend to be somewhat involved and don't work as well for developer
chats like these. there are lots of similar discussions on the google
group, though. you might consider search the archives and/or post
there.
[7:34pm] andywocky: rcopenjr: are trying to emulate multiple databases
on Datastore?  Is that even possible?
[7:35pm] Jason_Google: rcopenjr: There are several models you can
follow depending on your goals. For larger applications, you may want
to have one app ID per customer. For smaller apps, you can get away
with using one kind per customer or even using a single kind and
storing the customer's ID as a property which you can query on.
Segregating the data is easiest when it comes to querying and data
modeling, but harder for app maintenance.
[7:36pm] chilts: whilst we're in the thick of the chat, I'd like to
say thanks to all you Googlers for the BlobStore ... it's awesome ...
nice and simple
[7:36pm] chilts: easy to make it work (Python)
[7:36pm] rcopenjr: Thanks Jason....
[7:37pm] SnapABug: One last Q: Do you plan on providing a way to
redirect https traffic from something like https://www.snapabug.com to
https://snapabug.appspot.com ?
[7:37pm] Jason_Google: chilts: Glad you're finding it useful. We'll be
making it even better in forthcoming releases.
[7:37pm] SnapABug: (in this case, we already have the CNAME www.snapabug.com
mapped ghs.google.com, but only http is handled)
[7:37pm] Wesley_google: chilts: glad you're enjoying it!
[7:37pm] Jason_Google: SnapABug: Hopefully, we'll be able to start
supporting HTTPS on non-appspot.com domains before it comes to that
point. For now, you have to manage this redirect yourself.
[7:39pm] silassewell: Q: I was wondering if there were any plans to
allow the use of the blobstore via the fetch service?
[7:39pm] SnapABug: HTTPS support would be awesome.
[7:39pm] rcopenjr: Jason_Google:  A follow up question - is there a
determining factor for a large application -
[7:39pm] SnapABug: Is it on the roadmap?
[7:39pm] rcopenjr: number of entities, kinds, etc.
[7:40pm] ryan_google: rcopenjr: determining factor for performance? ie
latency, scalability, ...?
[7:40pm] daskalou: Q: Besides for transactions, is there any other
reason why we should put entities into entity groups?
[7:40pm] ryan_google: the short answer is no, number of entities and
kinds generally don't affect performance of individual entities.
[7:40pm] ryan_google: daskalou: the short answer is no
[7:40pm] ryan_google: er, sorry, performance of individual
*operations*
[7:40pm] rcopenjr: ryan_google: performance
[7:40pm] rcopenjr: Thanks.....
[7:42pm] andywocky: Q: I'm confused about the lifecycle of a handler.
If I map two endpoints in app.yaml, say to handler1.py and
handler2.py, are those handlers ever persisted in memory or cached?
For instance, will each handler run (including imports) for each
request, or less frequently?
[7:43pm] Jason_Google: SnapABug: Not yet. I'm not close enough to this
piece to comment with any authority, but I believe that support for
HTTPS on non-appspot.com domains, when it happens, requires us to take
advantage of browser support for SNI, so older browsers will
necessarily be left behind here. This is one reason why we haven't
enabled this yet -- we're still waiting for broader adoption. But we
recognize that a lot of developers want this, so we're looking into
prioritizing it higher.
[7:44pm] Wesley_google: SAB: here's more regarding what jason was
saying about non-appspot HTTS support and SNI:
http://googleappengine.blogspot.com/2008/10/announcing-https-support-for-appspotcom.html
[7:44pm] SnapABug: Jason_Google: Thanks for the detailed answer. Will
be looking forward for this feature release.
[7:44pm] Jason_Google: silassewell: Can you elaborate on your request?
I probably can't confirm one way or the other, but I can follow up for
you. Also, feel free to file feature requests in the issue tracker so
other developers can vote them up: 
http://code.google.com/p/googleappengine/issues/list
[7:45pm] ryan_google: andywocky: have you read
http://code.google.com/appengine/docs/python/runtime.html#App_Caching
?
[7:45pm] Wesley_google: (look towards the end of the blogpost)
[7:45pm] daskalou: Q: What's the best way to handle putting a decimal
data type into the Datastore?
[7:46pm] SnapABug: Wesley_Google: OK. Cool.
[7:46pm] Jason_Google: daskalou: There's actually a thread about this
in the groups, I believe. Nick Johnson wrote something about it. Let
me try to find it...
[7:47pm] silassewell: Jason_Google: I created a reverse proxy which
sites on app engine. Right now the fetch service and datastore is
currently limited to 1mb, so allowing fetch to retrieve objects larger
than 1mb and storing them in the blobstore would be nice (I'm also
assuming you do some optimizations when serving blobstore objects
which may be more efficient than datastore + memcache).
[7:47pm] enigmus_: Q: Are there news on 
http://code.google.com/p/googleappengine/issues/detail?id=2481
? "Index inconsistency: queries not returning all results"
[7:47pm] ryan_google: enigmus: one of my pet projects!
[7:47pm] ryan_google: we hate that
[7:48pm] daskalou: Jason_Google: thanks
[7:48pm] ryan_google: we (the datastore team) have been pushing hard
on that, and we're making solid progress. i can't say that we've fully
fixed it, but we think we're close.
[7:48pm] ryan_google: one thing to note is that we're focusing on
finding and eliminating the root causes first, since if we just go
through and fix the data without fixing those bugs, they'll just cause
more inconsistency
[7:49pm] ryan_google: but naturally we fully expect to fix both the bug
(s) and the existing data
[7:49pm] Jason_Google: daskalou: So far, I've found this:
http://googleappengine.blogspot.com/2009/07/writing-custom-property-classes.html
[7:49pm] enigmus_: ryan_google: ok, thanks
[7:49pm] Brandon\wcr: I've been sort of out of it, have cursors been
implemented yet?
[7:50pm] Jason_Google: Brandon\wcr: Coming up in the next release or
two.
[7:50pm] daskalou: Jason_Google: thanks, I found this too:
http://www.redredred.com.au/money-database-property-for-google-app-engine/
[7:50pm] salsakran: what kind of write load into the datastore is
possible by an app?
[7:50pm] Jason_Google: daskalou: Yep, that links to the same blog
post.
[7:50pm] daskalou: Q: When do you expect GAE to come out of "preview
release"?
[7:50pm] daskalou: Jason_Google: lol, cool
[7:51pm] ryan_google: daskalou: we'd need to define the difference
between preview and non-preview first.
[7:51pm] andywocky: ryan_google: thanks for the pointer.  Am I
interpreting correctly that imports are cached, but that imports for
each handler (handler1 vs handler2) are independent?
[7:51pm] andywocky: ... meaning that handler1 has its own namespace,
separate from handler2?
[7:51pm] ryan_google: out of curiosity, does it mean something
specific to you? for example, do you have stakeholders who won't use a
"preview" product because of that term specifically?
[7:52pm] daskalou: ryan_google: What do you expect the difference to
be?
[7:52pm] Brandon\wcr: Q:  Is there any timeline for task queue quota
increases?
[7:52pm] daskalou: ryan_google: Yes, that's pretty much it
[7:52pm] Jason_Google: salsakran: You can write data pretty quickly,
but you'll run into problems when you try to write the same entity or
write to the same entity group too quickly.
[7:52pm] chilts: Q. one concern of mine is if Google ever decide to
pull the plug on AppEngine? I guess there are no guarantees this will
never happen?
[7:52pm] salsakran: specifically: if we're writing scrobbler type
application, and split by user_id and shard the counters in question,
what sort of throughput is reasonable to hope for?
[7:52pm] chilts: I mean, if we have all these things running on it,
then it goes away, that'll be sad
[7:53pm] Jason_Google: Brandon\wcr: Which quotas specifically?
[7:53pm] daskalou: chilts: Good question
[7:53pm] Wesley_google: daskalou: your post does point to nick's
blogpost but the blogger in this case focused on a limitation of using
strings to store numeric values with and provided his own solution
[7:53pm] Brandon\wcr: Jason_Google: oops!  nevermind, just saw it was
increased already to 1mill
[7:53pm] ryan_google: daskalou: it's basically for managing
expectations, as you'd expect. re your stakeholders, that's sad. i
guess i'd encourage you to point them to actual data (status site for
uptime, over 100k apps and 250k developers, more than 250M pageviews
per day, apps in the  high 10s of millions of users, etc.)
[7:54pm] salsakran: do you happen to know what kind of write
throughput I can expect per entity?
[7:54pm] Jason_Google: chilts: App Engine isn't in labs, so we do have
a formal policy in place to support all apps running on it for a
certain period, 3 years I think, from any announcement of deprecation,
which isn't planned.
[7:54pm] ryan_google: chilts: naturally we don't expect that. you're
right though that it's a risk with almost anything you use that's run
by someone else.
[7:54pm] ryan_google: aha, jason has a much more specific answer.
ignore me.
[7:54pm] chilts: awesome
[7:54pm] chilts: 3yrs sounds plenty in that event
[7:55pm] ryan_google: salsakran: one answer is, don't expect more than
1-10qps of writes per entity group
[7:55pm] chilts: it's good to know these things, esp. if you base a
business around someone elses
[7:55pm] ryan_google: definitely!
[7:55pm] daskalou: Wesley_google and ryan_google: thanks
[7:56pm] ryan_google: np! glad to help
[7:56pm] Wesley_google: same here... glad to help users out!!
[7:56pm] andywocky: ryan_google: is my assumption about cached imports
in handlers correct?
[7:56pm] chilts: yeah, thanks guys (I figure these chats take it out
of you and make you tired)
[7:56pm] SnapABug: Yep. Thank you guys!
[7:56pm] ryan_google: andywocky: right, sorry. i'm not an expert on
the python runtime so i'm thinking about it.
[7:56pm] Wesley_google: i'm also open to taking any Python-specific
questions too for those of you who are newbies
[7:57pm] daskalou: Yeah Python newbie here
[7:57pm] daskalou: Wesley_google: Do you have experience with AEP?
[7:57pm] Wesley_google: speaking of which, today is the last day for
earlybird registration to the largest Python conference in the world
happening next month in ATL
[7:57pm] chilts: Wesley_google: I had an interesting one the other day
with BlobStore ... but I think that might be a question for the group
(since I'll need a few points to describe it)
[7:57pm] ryan_google: andywocky: when you say independent namespaces,
do you mean that the global vars are kept separate?
[7:58pm] Wesley_google: daskalou: nope... what's AEP?
[7:58pm] ryan_google: actually, regardless, it's probably over my
head. wesley might know, otherwise you could try the google-appengine-
python group
[7:58pm] Jason_Google: salsakran: Did Ryan answer your question?
Writing a lot of data isn't a problem, only when you're writing too
much to the same entity group.Some strategies about how to avoid this:
http://code.google.com/appengine/articles/scaling/contention.html
[7:58pm] salsakran: jason_google: yeah ... the 1-10 q/s was a useful
number
[7:58pm] Wesley_google: andywocky: each handler has its own namespace,
just like independent modules in "regular" Python
[7:59pm] andywocky: wesley_google: thanks!
[7:59pm] Wesley_google: sure
[7:59pm] daskalou: Wesley_google: app-engine-patch - Django with
support for admin and other things the built in Django doesn't support
[7:59pm] chilts: Jason_Google: so my thoughts there are, if I have
maybe 100 entities (no particular entity group), writing them all
should be no problem (even if they land on the same datastore server)?
[7:59pm] Wesley_google: ah, i figured as much
[8:00pm] Jason_Google: salsakran: Yeah, it varies, but you will likely
see some level of timeouts if you start writing more than 1 QPS to a
given entity group with any consistency. For that reason, we recommend
you keep your entities as small as possible and for items like
counters where you expect to update every request, you can shard your
data using a technique mentioned in that article.
[8:00pm] chilts: this is a theoretical thought (I don't have 100
entities to write)
[8:00pm] Wesley_google: unfortunately when i worked on the Django book
back in 2008, only the Django Helper for App Engine was out. AEP just
came out when our book was published, so i didn't get a chance to
experiment with it
[8:00pm] daskalou: Wesley_google: Re: my thread on the groups:
http://groups.google.com/group/google-appengine/browse_thread/thread/44d2d67cb1f4f735
Do you know if it's difficult to "share" models between the two
frameworks?
[8:01pm] Jason_Google: chilts: Yes, this is right. There does come a
point (e.g. several thousand QPS) when there are other considerations,
but in general, you should be able to write many entities in separate
entity groups in parallel.
[8:01pm] chilts: sweet
[8:02pm] chilts: I must admit, sometimes I wonder about how much
hardware you guys have there, and whilst you might not be at liberty
to say, a blog post would be awesome (how many memcache instances,
datastore servers, frontends etc)
[8:02pm] chilts: would make an interesting post
[8:02pm] Wesley_google: daskalou: yes, i think i skimmed your post. i
don't know the answer but my intuition is that it isn't cached
[8:02pm] Wesley_google: or rather, shared
[8:03pm] daskalou: Wesley_google: oh... damn
[8:03pm] Jason_Google: Alright then, the office hour is officially
over. Feel free to keep the discussion going though. We'll be back in
two weeks, Wednesday, January 20th, from 9:00 to 10:00 a.m. PST, and
I'll post a transcript of this session to the groups as soon as I can.
Thanks for the company.
[8:03pm] ryan_google: chilts: agreed! it's actually probably a lot
smaller than you think...but still, yeah, don't hold your breath.
[8:03pm] chilts: thanks Jason_Google
[8:03pm] chilts: ryan_google: heh, awesome
[8:03pm] chilts: but interesting
-- 
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 google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.


Reply via email to