[google-appengine] Re: How does this CPU limit stuff really work?

2009-01-16 Thread Josh Heitzman

http://code.google.com/p/googleappengine/issues/detail?id=240 is an
issue related to the issue you raised in your post.

On Jan 16, 1:31 pm, boson dan.kam...@gmail.com wrote:
 After a URL in the request log are the following fields (example):
 200 1584ms 2571ms-cpu 4kb
 Am I correct in believing these are: HTTP response code, real time,
 CPU time, and response size?

 Now I get various orange and red warnings depending on the ms-cpu
 value (almost always when I create an entity, and often just for
 writing one - even simple ones).  But I haven't ever seen any increase
 in my High CPU Requests on the quota page.  Is this normal?

 I've read these pages, but I'm still not sure what's going on 
 here.http://code.google.com/appengine/docs/quotas.html#Resourceshttp://code.google.com/appengine/articles/quotas.html

 The first page says Datastore CPU time does not count towards the
 high CPU threshold, but apparently it IS included in the value in the
 request log where the warning comes from.  Is there a breakdown
 anywhere of whether this time is in user CPU or DS CPU?

 Also with the amount of CPU time reported in the request log, it seems
 that even modest traffic will kill the CPU Time quota, as even the
 most basic DS write operations with a handful of properties seem to
 often take ~1000ms-cpu (even when the request itself takes less time).

 I'm not even sure what questions to ask here, so if you can answer the
 obvious unasked ones too please do so.  I'm rather confused by all
 this, but am hoping it's more obvious than it seems right now...

 Thank you.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Hiring contract programmers with Google App Engine / Python / AJAX experience

2008-12-06 Thread Josh Heitzman

A number of them yes.  http://codecrafter.wordpress.com/tag/appengine/
.  That link doesn't go to a single post that sums up all of the
things to consider, but rather a tag I put on all of my blog posts
that speak to the issue.

On Dec 6, 12:00 pm, mytemp [EMAIL PROTECTED] wrote:
 Yes, it should be well suited... do you have specific things I should
 consider?

 Thx!

 On Dec 5, 5:30 pm, Josh Heitzman [EMAIL PROTECTED] wrote:

  Are you certain that your app is well suited to app engine?  If not,
  you may want to first hire a consultant to evaluate your apps
  suitability to app engine.

  On Dec 5, 3:59 pm, mytemp [EMAIL PROTECTED] wrote:

   I want to implement a website on Google App engine, front end is AJAX
   with some web services/API calls, back-end is python on app-engine
   with some math/algorithms/DB access and constant back and forth
   interaction on a timer with minimal user interaction.  Prefer
   everything be app engine and not host any servers ;-)

   Please mail me experience, example sites, and expected rate.  Location
   is flexible, but preference is bay area.

   Thanks!- Hide quoted text -

  - Show quoted text -
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: How far can Google take this thing?

2008-12-05 Thread Josh Heitzman

I think the answer really depends on how much Google is willing to
invest in GAE.  Eventually could be two years from now or ten years
from now, but if its the later they may miss the boat considering
there are numerous big names and no names all moving into this space.
One of those big names is Microsoft, and while they are just getting
into this space, one thing they do really well is getting application
developers to target their platforms.  In my opinion Google has a long
way to go in that respect.

After using GAE's platform for the last few months I can honestly say
that the only thing I like about it is that I haven't had to pay for
the hosting of my app.  Sure getting an app going that fits with-in
the quite limited confines of what GAE supports well is quite easy,
but it doesn't take much to smack into GAE's walls and then it becomes
very much a square peg in round whole experience where doing things
that would be quite simple on other platforms is quite difficult on
GAE or even impossible without getting shutdown due to going over CPU
quota.

Josh

On Dec 5, 10:42 am, rvjcallanan [EMAIL PROTECTED] wrote:
 I am about to take the GAE plunge (at least in the experimentation
 sense).
 I understand the current irritations and I am hopeful that these will
 be overcome in due course

 But I am very curious how far Google can take this thing...

 A key question on everyone's mind:

 Can we assume that GAE developers will eventually be able to produce
 GAE apps with similar complexity, reliability, scalability and
 performance ballparks as Gmail, subject of course to hosting fees?

 If the answer to that question is YES, then I am am convinced that
 GAE will eventually be able to host sophisticated financial
 applications that are not currently in the GAE sweetspot, e.g.
 accounts, payroll, etc

 Or would it be more realistic to assume that GAE developers will never
 really be able to leverage what Gmail's developers can leverage?

 Looking beyond the Gmail comparison, I see lots of problems with the
 GAE datastore for financial applications e.g. the absence of joins,
 aggregation, etc. I understand that these limitations are inherent to
 the BigTable paradigm, yet I already see posts by developers showing
 how these limitations can be overcome. Solutions tend to revolve
 around de-normalisation and other forms of data redundancy together
 with a sizable smattering of code trickery. All very, very botchy and
 alien to the GAE philosophy of removing much of the the tedium of web
 development.

 I am wondering if it will ever be possible to write an abstraction
 layer that will present the underlying GAE datastore as an SQL
 database albeit at a cost in terms of data efficiency, CPU cycles and
 bandwidth...or is this completely missing the point?

 Bear in mind that I am thinking a few years down the road.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Why limit request time (as opposed to cpu usage)?

2008-12-02 Thread Josh Heitzman

Apparently GAE's infrastructure will just continue to spawn more
processes as needed, so your app actually should continue to scale
even if it waits 1 minute instead of 10 seconds for URLFetches, but
operating your app will be more costly as memory usage time will be
increased by a factor of 6.  Currently google isn't tracking memory
usage time though (at least that we know of), so they couldn't
actually charge for it at present.

On Dec 1, 11:14 pm, JM Ibanez [EMAIL PROTECTED] wrote:
 On Tue, Dec 2, 2008 at 3:08 PM, Amir Michail [EMAIL PROTECTED] wrote:

  Hi,

  When doing a urlfetch, it may take quite a long time.  As this is not
  a CPU usage issue, what's the point of limiting the request time
  anyway? Why not allow the request to go on for a minute or so?

 As I understand it, the thread doing the fetch will be blocked and
 cannot service any other requests until it finishes the fetch. Now, if
 a lot of threads are blocked waiting for that resource to be fetched,
 you will not be able to scale -- as it would be effectively an
 inadvertent denial of service for your app (and the whole
 infrastructure).

 --
 JM Ibanez --

 The worst government is often the most moral. One composed of cynics
 is often very tolerant and humane. But when fanatics are on top there
 is no limit to oppression.
 -- H. L. Mencken

 -http://www.livejournal.com/~jmibanez/http://www.mycgiserver.com/~butiki/
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Observing GAE Scalability (or trying to ...)

2008-11-16 Thread Josh Heitzman

The lack of any long running server side process also precludes doing
any real time MMOGs.  With many turn based web based MMOGs there is no
way to partition the game state into entities such that executing all
player commands only requires updating entities in one entity group
during the execution of the command, so its necessary to implement a
cross-entity group transaction layer on top of the GAE datastore, but
its currently unclear to me that this can actually be done while
staying under GAEs quotas.

On Nov 16, 11:52 am, Ben Nevile [EMAIL PROTECTED] wrote:
 Hi Ross,

  Well, Google App Engine would be a terrible place to serve most
  massively multiplayer games.  I hope that's not what got you
  interested in GAE.

 Pretend I'm dumb... no, it's okay, I *am* dumb when it comes to MMOG.
 Why would GAE be a terrible place to serve these? The type of
 communication required?

 Ben
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] CapabilityDisabledError: Datastore writes are temporarily disabled.

2008-11-15 Thread Josh Heitzman

Just started seeing this exception thrown from any attempt to write to
the datastore.

Anyone else seeing this at present, or is it just me?

Thanks,

Josh Heitzman
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: CapabilityDisabledError: Datastore writes are temporarily disabled.

2008-11-15 Thread Josh Heitzman

Good call.  Looks like there scheduled maintenance now per
http://groups.google.com/group/google-appengine-downtime-notify/browse_frm/thread/455b69c7bf3b0de

Josh

On Nov 15, 2:24 pm, russ.au [EMAIL PROTECTED] wrote:
 I'm getting this exception in my app engine app :
 CapabilityDisabledError: Datastore writes are temporarily disabled.

 A search of this group suggest this only happens during scheduled
 maintenance?http://groups.google.com/group/google-appengine/browse_thread/thread/...

 The data viewer is also giving me a Server Error.

 Are other people seeing the same errors?

 Russ
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Tips on Optimizing Writes?

2008-10-29 Thread Josh Heitzman

Jeff you said:

The CPU warning in the log is based on runtime CPU, while the
displayed CPU warning in the log is based on runtime and datastore
CPU.

but you wrote in the log is based on both times.  I'd assume one of
those is type, so could you clarify which if the mcycle consumption
value shown in the per request logs the runtime mcycles or the runtime
and datastore mcycles?

If the mcycle value shown in the per request logs is only the runtime
mcycles then issue 786 is not a duplicate of 814 as the values listed
in 786 were taken from the per request logs.

Thanks,

Josh Heitzman

On Oct 29, 11:27 am, Jeff S [EMAIL PROTECTED] wrote:
 Hi Waldemar,

 On Oct 28, 3:22 pm, Waldemar Kornewald [EMAIL PROTECTED] wrote:



  Hi Jeff,

  On 28 Okt., 21:11, Jeff S [EMAIL PROTECTED] wrote:

Our queries and indices are rather simple. I should clarify:
The particular problem I'm talking about is a view that currently has
a response time of about 360ms and almost all of the time (280ms) is
spent on datastore put()/fetch()/get(). IOW, runtime CPU usage is low.
If you only read data then 360ms would probably consume less than
1500mcycles, but since this view primarily writes to the datastore it
consumes more than 10,000mcycles! That's really bothering me because I
already get yellow warnings for views that consume more than
1000mcycles and here I have red warnings. How am I supposed to
implement a simple write operation if it eats mcycles so quickly? Can
I just ignore the warning since only runtime cpu counts and we
primarily consume datastore cpu in this case?

   From your description, it sounds like the datastore CPU usage need not
   concern you. If the CPU Usage listed on the admin console is at an
   acceptable level and the logs do not contain large amounts of high CPU
   request warnings, then your app should be okay.

  Well, that's the problem. The dashboard shows a warning sign (!)
  and very high Avg CPU usage for that URL, but the logs don't mention
  anything at all for that URL. So, which is more correct? The dashboard
  or the logs? :)

 The two are currently measuring different things. The CPU warning in
 the log is based on runtime CPU, while the displayed CPU warning in
 the log is based on runtime and datastore CPU.

 Thank you,

 Jeff



  Normally, if I consume too much CPU I get an explicit warning
  *message* in the logs:

10-25 06:48AM 43.525 / 200 802ms 2754mcycles ! 3kb
[...snip...]
This request used a high amount of CPU, and was roughly 2.6
  times over the average request CPU limit. High CPU requests have a
  small quota, and if you exceed this quota, your app will be
  temporarily disabled.

  As I said, that warning message doesn't appear. But if I print
  something to the logs I can see in the header of the log entry that
  the request consumes a huge amount of CPU (e.g., 15000mcycles !,
  please note the ! warning *sign*). Why do I *not* get a warning
  *message* although I can provoke a warning *sign* if (and only if) I
  print something to the logs?

  Also, why does the CPU quota usage go up and down so quickly? A few
  minutes ago I had 40gcycles used and after I visited that high-CPU URL
  four times it went up to 85gcycles and a few minutes later it went
  back to 0. I thought this was a *24h* moving window? Don't get me
  wrong. I don't mind quota usage going back to zero every few minutes
  (or seconds would be fine, too). :)

  Thanks!

  Bye,
  Waldemar Kornewald
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Tips on Optimizing Writes?

2008-10-24 Thread Josh Heitzman

If you can't reduce the number of entities, then all you have left is
to reduce the number of indexed fields on the entities and the number
of elements in any list fields on the entities.  That said you can't
put two entities with only a single non-indexed property each in less
then 1000 mcycles.  See 
http://code.google.com/p/googleappengine/issues/detail?id=786

On Oct 23, 6:57 pm, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 Hi,

 My application get a lot of high-CPU usage warnings on the production
 server. I have spent the past few weeks profiling and optimizing my
 production code as suggested.

 From profiler data, I know that 99% of processor time is spent in
 Model.put or db.put. As a result I have been aggressively eliminating
 unnecessary or duplicate write operations. For instance in my most
 processor intensive http request, I have cut down the number of
 entities I update from 5 to a varying number between 0 and 3 depending
 on what absolutely must be updated. I also batch writes by using
 db.put() instead of separately calling Model.put(). As a result, I
 have cut the number of mcycles down from 7000+ to an average of around
 2000 mcycles.

 However, I still get high cpu warnings on one http request, because it
 absolutely needs to update 3 separate entities (two node entities in a
 directed graph, and a sharded counter entity). So my question is, what
 else can I do to further optimize this specific section of code?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: High CPU Warning on module load

2008-10-21 Thread Josh Heitzman

As I understand it loaded modules are cached, so if your have two
scripts importing the same modules for the handling of two different
requests the modules will only get loaded once so long as that
particular process instance is running.

On Oct 21, 2:22 pm, Adam [EMAIL PROTECTED] wrote:
 So given that I need modules a,b and c for all of my request handlers,
 I'm better off having fewer
 larger modules rather than a script for each page?

 A

 On Oct 21, 4:59 pm, Marzia Niccolai [EMAIL PROTECTED] wrote:

  Hi Adam,

  The biggest thing you can do to in this case is don't import large modules
  until you need them.  If your app has been idle for awhile, it will take
  some CPU to warm up the Python interpreter in terms of import costs, but not
  loading big modules until/unless they are needed, you will only incur this
  cost when necessary.

  It should also be noted that sometimes it's expected that a request might
  take more CPU than average.  The key is to limit those requests overall.

  If you are interested in optimizing your app, I would suggest watching
  'Building Scalable Web Applications', one of our Google I/O 
  talks:http://sites.google.com/site/io/building-scalable-web-applications-wi...

  -Marzia

  On Tue, Oct 21, 2008 at 1:54 PM, Adam [EMAIL PROTECTED] wrote:

   I'm getting high cpu warnings when I hit the main page of my app
   (www.fyood.com) for the first time after being idle for 10-20
   minutes.

   Given that the warning isn't there the second time (250 v.s. 2500 mega
   cycles), and there's no datastore activity, it seems like this is the
   cost of creating the objects, loading imports etc.

   Anyone have a good strategy for dealing with this, or a good handle on
   which pieces are more expensive.

   e.g. should I create smaller classes, fewer classes, less but larger
   modules, more smaller modules etc. do less regex compiles etc.

   Also, any pointers to specifics on the high cpu quota?  e.g. 3 times/
   hour, 3 times/minute etc.

   A
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: High CPU usage for put()

2008-10-20 Thread Josh Heitzman

It is not just you.  An issue has be opened
http://code.google.com/p/googleappengine/issues/detail?id=786 but the
GAE team has yet to acknowledge it or response to other posts on the
subject on this discussion group.

On Oct 19, 10:18 pm, MajorProgamming [EMAIL PROTECTED] wrote:
 Is it just me or do puts take up a tremendous amount of CPU power. I
 was looking over my logs and found that many of my requests which
 updated a record in the database were marked as using a high amount of
 cpu. (such as 2139/2044/2283/etc mcycles). Is this normal or am I
 doing something wrong?

 Just to give you a overview of what this particular request does
 (although I noticed this on a lot of requests on another application I
 am developing), here is the basic outline of the code: (excerpts)

 #start off with get or insert (variable p is passed from the request
 query string)
 r = Users.get_or_insert(key_name='p:%s' % p, number=p)
 #the app then goes through about 8 if/elif statements, and depending
 will set:
 r.aproperty=True
 #(or false)
 #and then we store the change
 r.put()

 So how much more can it be optimized!?!

 Thanks for your help
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: ROR

2008-10-18 Thread Josh Heitzman

Not at present.  Currently only Python is supported.

On Oct 17, 11:54 pm, amshuhu [EMAIL PROTECTED] wrote:
 Its possible Ruby coding in Google App Engine ?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Feature Request?

2008-10-17 Thread Josh Heitzman

I wouldn't want the item deleted until I had done whatever processing
I needed to do with its data to ensure it didn't get lost due to a
raised exception or crashed machine.

On Oct 17, 9:18 am, Ethan Post [EMAIL PROTECTED] wrote:
 A common task (queueing) is fetchitem...delete the item once it has been
 fetched. Right now that requires a get/fetch and a call to db.delete at
 some point. It would be nice if there was a particular attribute that could
 be set in the get which would automatically delete the item once it has been
 fetched. Google could figure out the most efficient mechanism for doing this
 on the backend and we end up saving mcycles by not having to call the delete
 for this type of db request.

 Stupid? Not stupid? Would anyone else like this feature?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Datastore storage recommendation...

2008-10-17 Thread Josh Heitzman

Haven't tried it, but I found that a class derived from Model with one
attribute of type BlobProperty has the same baseline time as one with
an empty StringListProperty.  Further both of those are slightly
faster then a Model with an single IntegerProperty.  This makes sense
as I wouldn't expect the BlobProperty to do anything with its data and
I would expect StringListProperty to get no further then checking the
number of items in the list in its processing.

On Oct 17, 7:25 am, David koblas [EMAIL PROTECTED] wrote:
 That's at least interesting from an update standpoint.  If I read that
 correctly the biggest overhead is the DS Put operation, so the
 optimization of moving everything to single entry ID/Key/Value stores
 would cause problems during updates.  Though as a difference I'm using
 the Entity object directly not the Django Model abstraction.  Was there
 any noted performance differences with that test (eg. Are the *Property
 bits using a lot of time)

 Josh Heitzman wrote:
  Seehttp://groups.google.com/group/google-appengine/browse_thread/thread/...
  regarding the mcycle consumption impact of having lots of fields.

  On Oct 16, 9:11 pm, David koblas [EMAIL PROTECTED] wrote:

  I'm storing application preferences in the datastore, they come in a
  variety of types.  As I see it I've got three choices for implementation:

  * Name / Blob
-- general has a json encoded object of all of the sub-settings
  * Name / ID / Lots of Fields
--  Where ID = general or user (etc.) and different fields in
each entity
  * Name / ID / Key  / Value
-- Where you  query out all of the user settings and
re-construct an object from it.

  My gut feel is that #2 is preferable, since it avoids double encoding
  the data and doing a query out of a large number of records in the later
  case.

  Thanks,
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: 1000 mcycles to update a single entity

2008-10-16 Thread Josh Heitzman

I've experimented with pickling and found that in about 810 mcycles
are consumed getting the entity (just one BlobProperty), unpickling,
pickling, and then putting the entity.  Of those mcycles most (~730)
go into the put operation.

This only leaves 190 mcycles to actually do the work of parsing the
request, processing data, and constructing a result.  Even if you can
manage to stay under 1000 mcycles you can only ever put one entity per
request and stay under 1000 mcycles and I found the putting a second
entity basically doubles the get, pickling, and put times.

The sad thing is the actual runtime of putting multiple entities isn't
very long.  I've seen 15000 mcycle be consumed by a request that took
less then two seconds to actually get rendered in my browser.

So this 1000 mcycle soft cap seems out of whack with the reality of
how many mcycles are consumed by put data into the store.

While the soft cap can be gotten around by breaking up the processing
into multiple requests behind the scenes, this will result in higher
mcycle consumption to process the user command as well as longer
response time which just isn't good for my bottom line (since we'll be
paying for overall mcycle consumption) or my user satisfaction as
anyone using a high latency connection see it many seconds longer to
render a page.  For example someone on using satellite will probably
see about a 4 second delay for every chunk the processing is broken
into.

On Oct 16, 12:20 am, Andy Freeman [EMAIL PROTECTED] wrote:
 Does this do what you'd like?

 import copy
 import pickle

 # should work on any pickle able datatype
 # tested with both dicts and lists, works with unicode keys, data,
 elements

 # empty() is arguably wrong, but what's correct?
 # choices probably doesn't make any sense here, but 
 # readable=True is for folks who want to look at pickle encoded data.
 class PickleProperty(db.Property):
 def __init__(self, readable=False, *args, **kwds):
 if readable:
 self._readable = 0
 self.data_type = db.Text
 else:
 self._readable = -1
 self.data_type = db.Blob
 super(PickleProperty, self).__init__(*args, **kwds)

 # as with db.ListProperty, don't want any static sharing
 def default_value(self):
 return copy.deepcopy(self.default)

 # if value is true or the same type as the default value, it is
 # assumed to be reasonable even if required is set.
 def empty(self, value):
 return not (value or (isinstance(value, type(self.default

 def get_value_for_datastore(self, model_instance):
 v = super(PickleProperty,
 self).get_value_for_datastore(model_instance)
 r = pickle.dumps(v, self._readable)
 return self.data_type(r)

 def make_value_from_datastore(self, value):
 v = super(PickleProperty,
 self).make_value_from_datastore(value)
 r = pickle.loads(str(v))
 return r

 class XX(db.Model):
 data = PickleProperty(default={})

 xx = XX()
 xx.data['a'] = 7
 xx.put()
 yy = XX.get(xx.key())
 assert xx.data == yy.data

 On Oct 15, 12:25 am, Josh Heitzman [EMAIL PROTECTED] wrote:

  There are no indexes in index.yaml for these entity kinds and not very
  many of the properties are being changed at one time (no idea if that
  matters or not).

  If updating the implicit indexes is the majority of the cost of doing
  these updates, then I definitely agree that either--
  1) an attribute for disabling the implicit indexing of properties
  should be added, or
  2) native serialization needs to be provided as part of the runtime so
  we can quickly (de)serialize our data (from)into a blob.

  On Oct 15, 12:04 am, djidjadji [EMAIL PROTECTED] wrote:

   For this entity at least 44 (10+1+2+15+1+15) index updates have to be done
   in 16 different index tables (10+1+2+1+1+1). Every attribute has its
   implicit index
   and you get an implicit index for the 'product' of the property lists.
   Not to mention the index tables mentioned in the index.yaml file that
   this entity uses.
   It can grow big when you have the ListProperties used in the
   index.yaml file, 15 extra updates
   for every mention of the string list property.

   I'm sure not every property of an entity is used in a query to retrieve 
   objects.
   To reduce the number of index updates it could be useful to have a
   non-index version of every property type. Just like we have for the
   StringProperty. The TextProperty does not have an index to be updated.

   A possible syntax to tell AppEngine NOT to create and update an index for 
   a
   property would be to add an attribute to the Property constructor.
   The default value of the attribute is True.

   def MyModel(db.Model):
 id = db.IntegerProperty(required=True)
 num1 = db.IntegerProperty(need_index=False)

   This would also help not to often hit the entity-index-update-limit
   ('exploding' index).

   Are the index updates counted

[google-appengine] Re: Is there a way to get mcycles in code?

2008-10-16 Thread Josh Heitzman

I'm not aware of anyway to get the mcycle in code either.  As a result
I've been breaking out little chunks of my processing and testing how
long each on takes and I've found that updating an existing entity
consumes no less then an average of 718 mcycles.  And that's for an
entity with an empty StringListProperty or an EmptyBlobProperty.
Starting adding properties or items to a list and the mcycle
consumption of an update starts jumping up.  For example an entity
with a single StringLIstProperty that has 40 elements each 14
characters long takes and average 2141 mcycles to update.

See 
http://groups.google.com/group/google-appengine/browse_thread/thread/a29a4b1dd606f52e
for details.

On Oct 16, 10:07 am, Ethan Post [EMAIL PROTECTED] wrote:
 I have profiled the code. The problem with profiling is that the top CPU
 consuming calls appear to be part of the appengine framework, nothing I can
 do anything about. Also I don't understand how to correlate the information
 from profiling directly to mcycles. Just putting debug calls and looking at
 the timestamps tells me that most of time is taking place when I call put. I
 would like to record mcycles for each logging.debug call. Maybe I can add
 some calls using the profiler but I haven't figured out how to do that.

 On Thu, Oct 16, 2008 at 11:29 AM, Mahmoud [EMAIL PROTECTED] wrote:

  You might want to profile your code:
 http://code.google.com/appengine/kb/commontasks.html#profiling

  On Oct 16, 12:04 pm, Ethan Post [EMAIL PROTECTED] wrote:
   I would like to include the # of mcycles consumed in some of my logging.
  At
   the moment it a put to two entities has occasional timeouts and the
  number
   of mcycles appears to fluctuate for essentially the same put. I would
  like
   to add some logging to see if this is the case and if so what the
  variations
   are.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Is there a way to get mcycles in code?

2008-10-16 Thread Josh Heitzman

Just opened http://code.google.com/p/googleappengine/issues/detail?id=789
- API to get current mcycle consumption during request processing.

On Oct 16, 9:04 am, Ethan Post [EMAIL PROTECTED] wrote:
 I would like to include the # of mcycles consumed in some of my logging. At
 the moment it a put to two entities has occasional timeouts and the number
 of mcycles appears to fluctuate for essentially the same put. I would like
 to add some logging to see if this is the case and if so what the variations
 are.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Datastore storage recommendation...

2008-10-16 Thread Josh Heitzman

See 
http://groups.google.com/group/google-appengine/browse_thread/thread/a29a4b1dd606f52e
regarding the mcycle consumption impact of having lots of fields.

On Oct 16, 9:11 pm, David koblas [EMAIL PROTECTED] wrote:
 I'm storing application preferences in the datastore, they come in a
 variety of types.  As I see it I've got three choices for implementation:

 * Name / Blob
   -- general has a json encoded object of all of the sub-settings
 * Name / ID / Lots of Fields
   --  Where ID = general or user (etc.) and different fields in
   each entity
 * Name / ID / Key  / Value
   -- Where you  query out all of the user settings and
   re-construct an object from it.

 My gut feel is that #2 is preferable, since it avoids double encoding
 the data and doing a query out of a large number of records in the later
 case.

 Thanks,
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: 1000 mcycles to update a single entity

2008-10-15 Thread Josh Heitzman

There are no indexes in index.yaml for these entity kinds and not very
many of the properties are being changed at one time (no idea if that
matters or not).

If updating the implicit indexes is the majority of the cost of doing
these updates, then I definitely agree that either--
1) an attribute for disabling the implicit indexing of properties
should be added, or
2) native serialization needs to be provided as part of the runtime so
we can quickly (de)serialize our data (from)into a blob.

On Oct 15, 12:04 am, djidjadji [EMAIL PROTECTED] wrote:
 For this entity at least 44 (10+1+2+15+1+15) index updates have to be done
 in 16 different index tables (10+1+2+1+1+1). Every attribute has its
 implicit index
 and you get an implicit index for the 'product' of the property lists.
 Not to mention the index tables mentioned in the index.yaml file that
 this entity uses.
 It can grow big when you have the ListProperties used in the
 index.yaml file, 15 extra updates
 for every mention of the string list property.

 I'm sure not every property of an entity is used in a query to retrieve 
 objects.
 To reduce the number of index updates it could be useful to have a
 non-index version of every property type. Just like we have for the
 StringProperty. The TextProperty does not have an index to be updated.

 A possible syntax to tell AppEngine NOT to create and update an index for a
 property would be to add an attribute to the Property constructor.
 The default value of the attribute is True.

 def MyModel(db.Model):
   id = db.IntegerProperty(required=True)
   num1 = db.IntegerProperty(need_index=False)

 This would also help not to often hit the entity-index-update-limit
 ('exploding' index).

 Are the index updates counted in the mcycles used?

 2008/10/15 Josh Heitzman [EMAIL PROTECTED]:



  Regarding the first question, those mcycle numbers are from logs on
  GAE, not from local profiling.  But if you mean are lots of people
  using, no.  I was the only user with any data when I did the test.

  Regarding the second question, the entities are not what I would
  consider large. For example, one has 10 integer properties, 1 string
  property, 2 datetime properties, one string list property (15 strings
  with none more 30 characters long), and one int list property (only 1
  value at the moment).

  The entity group had 4 entities in it when I generated those numbers.

  There is no contention involved, as the data is user specific and I
  was the only user with data when I did the test.

  On Oct 14, 8:31 pm, David Symonds [EMAIL PROTECTED] wrote:
  On Wed, Oct 15, 2008 at 1:50 PM, Josh Heitzman [EMAIL PROTECTED] wrote:
   Actually, I'm it take about 1500 mcycle to update one entity and then
   an about an additional 1000 mcycle per additional entity (each a
   different kind in this case) that is updated via the same db.put call.

  Is this in production? What size is the entity? Is it in a large
  entity group? How much contention do you think is involved?

  Dave.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] 754 mcycles to update an entity (sole in group) with one integer property

2008-10-15 Thread Josh Heitzman

As we didn't see anyone from the GAE team confirm or deny that the
excessive mcycle consumption for doing an entity update was due to the
number of properties on the entity (see this thread
http://groups.google.com/group/google-appengine/browse_thread/thread/2901a4ddd1f671d9
) I decided to do a little experiment.

Follows are the average mcycle consumptions (on GAE not locally) to
update 4 different types of entities.  Each entity has no parent and
or children (i.e. its the one and only entity in its group).  There
was no contention as these entities were created solely for this test.

754 - one IntegerProperty
864 - One each of IntegerProperty, DateTimeProperty, FloatProperty,
and StringProperty
718 - one StringListProperty with no elements
2141 - one StringListProperty with 40 elements each with 14
characters.

Has anyone else done a similar experiment?

If so did you get similar results?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: 1000 mcycles to update a single entity

2008-10-15 Thread Josh Heitzman

Opened http://code.google.com/p/googleappengine/issues/detail?id=786
regarding this issue.

On Oct 15, 12:25 am, Josh Heitzman [EMAIL PROTECTED] wrote:
 There are no indexes in index.yaml for these entity kinds and not very
 many of the properties are being changed at one time (no idea if that
 matters or not).

 If updating the implicit indexes is the majority of the cost of doing
 these updates, then I definitely agree that either--
 1) an attribute for disabling the implicit indexing of properties
 should be added, or
 2) native serialization needs to be provided as part of the runtime so
 we can quickly (de)serialize our data (from)into a blob.

 On Oct 15, 12:04 am, djidjadji [EMAIL PROTECTED] wrote:

  For this entity at least 44 (10+1+2+15+1+15) index updates have to be done
  in 16 different index tables (10+1+2+1+1+1). Every attribute has its
  implicit index
  and you get an implicit index for the 'product' of the property lists.
  Not to mention the index tables mentioned in the index.yaml file that
  this entity uses.
  It can grow big when you have the ListProperties used in the
  index.yaml file, 15 extra updates
  for every mention of the string list property.

  I'm sure not every property of an entity is used in a query to retrieve 
  objects.
  To reduce the number of index updates it could be useful to have a
  non-index version of every property type. Just like we have for the
  StringProperty. The TextProperty does not have an index to be updated.

  A possible syntax to tell AppEngine NOT to create and update an index for a
  property would be to add an attribute to the Property constructor.
  The default value of the attribute is True.

  def MyModel(db.Model):
id = db.IntegerProperty(required=True)
num1 = db.IntegerProperty(need_index=False)

  This would also help not to often hit the entity-index-update-limit
  ('exploding' index).

  Are the index updates counted in the mcycles used?

  2008/10/15 Josh Heitzman [EMAIL PROTECTED]:

   Regarding the first question, those mcycle numbers are from logs on
   GAE, not from local profiling.  But if you mean are lots of people
   using, no.  I was the only user with any data when I did the test.

   Regarding the second question, the entities are not what I would
   consider large. For example, one has 10 integer properties, 1 string
   property, 2 datetime properties, one string list property (15 strings
   with none more 30 characters long), and one int list property (only 1
   value at the moment).

   The entity group had 4 entities in it when I generated those numbers.

   There is no contention involved, as the data is user specific and I
   was the only user with data when I did the test.

   On Oct 14, 8:31 pm, David Symonds [EMAIL PROTECTED] wrote:
   On Wed, Oct 15, 2008 at 1:50 PM, Josh Heitzman [EMAIL PROTECTED] wrote:
Actually, I'm it take about 1500 mcycle to update one entity and then
an about an additional 1000 mcycle per additional entity (each a
different kind in this case) that is updated via the same db.put call.

   Is this in production? What size is the entity? Is it in a large
   entity group? How much contention do you think is involved?

   Dave.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: 754 mcycles to update an entity (sole in group) with one integer property

2008-10-15 Thread Josh Heitzman

Oh, and:

756 - one StringListProperty with 1 element with 490 characters.

So each of the three trials had just one property was under 800
mcycles regardless of the size of the property.

On Oct 15, 9:17 pm, Josh Heitzman [EMAIL PROTECTED] wrote:
 As we didn't see anyone from the GAE team confirm or deny that the
 excessive mcycle consumption for doing an entity update was due to the
 number of properties on the entity (see this 
 threadhttp://groups.google.com/group/google-appengine/browse_thread/thread/...
 ) I decided to do a little experiment.

 Follows are the average mcycle consumptions (on GAE not locally) to
 update 4 different types of entities.  Each entity has no parent and
 or children (i.e. its the one and only entity in its group).  There
 was no contention as these entities were created solely for this test.

 754 - one IntegerProperty
 864 - One each of IntegerProperty, DateTimeProperty, FloatProperty,
 and StringProperty
 718 - one StringListProperty with no elements
 2141 - one StringListProperty with 40 elements each with 14
 characters.

 Has anyone else done a similar experiment?

 If so did you get similar results?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Unexpected timeouts

2008-10-14 Thread Josh Heitzman

Timeouts can happen on even the simplest of datastore operations.  As
I understand it when a timeout does occur on a transaction (including
a single put as there is a transaction there underneath) there is a
lot of extra processing due to retry attempts.

On Oct 13, 11:40 pm, Roy Leban [EMAIL PROTECTED] wrote:
 This might be bug 764 (http://code.google.com/p/googleappengine/issues/
 detail?id=764) but I'm not sure.

 Sometimes, I get timeouts that don't make sense. For example,
 refreshing my home page (sometimes, when it happens to include a
 single database write).

 0-13 05:58PM 18.196 / 500 4180ms 10883mcycles 5kb
 
   File myfile.py ...
 some_entity.put()
   File /base/python_lib/versions/1/google/appengine/ext/db/
 __init__.py, line 618, in put
 return datastore.Put(self._entity)
   File /base/python_lib/versions/1/google/appengine/api/
 datastore.py, line 162, in Put
 raise _ToDatastoreError(err)
   File /base/python_lib/versions/1/google/appengine/api/
 datastore.py, line 1627, in _ToDatastoreError
 raise errors[err.application_error](err.error_detail)
 Timeout

 It's looking like the 10883 megacycles is 20-50x a typical load of my
 home page. Anybody have any ideas?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] 1000 mcycles to update a single entity

2008-10-14 Thread Josh Heitzman

I've been digging into where may app is spending its mcycles.  By
using memcache I've gotten all of my requests that only read data down
well under the 1000 mcycle overall average request processing limit;
however, I'm seeing that it takes about 1000 mcycles to update a
single entity (not indexed, not very large either).

Is this in line with what other folks are seeing?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: 1000 mcycles to update a single entity

2008-10-14 Thread Josh Heitzman

Regarding the first question, those mcycle numbers are from logs on
GAE, not from local profiling.  But if you mean are lots of people
using, no.  I was the only user with any data when I did the test.

Regarding the second question, the entities are not what I would
consider large. For example, one has 10 integer properties, 1 string
property, 2 datetime properties, one string list property (15 strings
with none more 30 characters long), and one int list property (only 1
value at the moment).

The entity group had 4 entities in it when I generated those numbers.

There is no contention involved, as the data is user specific and I
was the only user with data when I did the test.

On Oct 14, 8:31 pm, David Symonds [EMAIL PROTECTED] wrote:
 On Wed, Oct 15, 2008 at 1:50 PM, Josh Heitzman [EMAIL PROTECTED] wrote:
  Actually, I'm it take about 1500 mcycle to update one entity and then
  an about an additional 1000 mcycle per additional entity (each a
  different kind in this case) that is updated via the same db.put call.

 Is this in production? What size is the entity? Is it in a large
 entity group? How much contention do you think is involved?

 Dave.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Does the datastore cache?

2008-10-13 Thread Josh Heitzman

Just tried my app and I'm seeing changes show up immediately as
expected.  I was having some issue with page caching until I added:

meta http-equiv=Cache-Control content=no-cache /

to the head element of my pages.  If you can reproduce the problem
yourself, you can check your logs right after seeing the problem to
see if the request actually got to the server or if a cached version
was actually rendered.

On Oct 12, 7:58 pm, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 I'm having the same problem.

 On Sep 19, 10:13 am, Andreas Krohn [EMAIL PROTECTED] wrote:

  Some clarifications from me as well... It doesn't matter how many
  times I force reload withoutcache, the new content doesnt show up
  (even if I can see it in the datastore). The delay is not just a few
  minutes (which I could live with) but several hours (and counting).

  Any ideas of how to get around this would be greatly appreciated!
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: 3000 mcycles and This request used a amount of CPU and may soon exceed its quota

2008-10-13 Thread Josh Heitzman

I've been wondering the same thing.  When they start letting us pay
for this, will our apps still have to stay under some arbitrary
average number of CPU cycles?

On Oct 13, 3:21 am, Matija [EMAIL PROTECTED] wrote:
 Hi,
 I have some init stage imports to app-engine application and
 combining  with some ajax calls I was able to use maximum of 3000
 mcycles per request. When there is request that consumes more the 1000
 mcycles I have warning 'This request used a amount of CPU and may soon
 exceed its quota.' in my application log.

 Should I be worried because of that or not. Is this general warning
 for me to inform me that with this average CPU use i will use all my
 CPU quota eventually soon, or that app-engine quota permits this CPU
 usage only few times let's say per minute and that they will stop my
 application for several hours if I continue with this usage.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: how to create a plugable system and API without pkg_resources

2008-10-11 Thread Josh Heitzman

It isn't impossible to use pkg_resources and setuptools with GAE.
Pylons makes use of these and appengine-monkey ( 
http://code.google.com/p/appengine-monkey/
) was created to get Pylons working on GAE.  If you aren't using
Pylons appengine-monkey still may prove useful to you.

On Oct 11, 10:51 am, sevenseeker [EMAIL PROTECTED] wrote:
 I have become used to / spoiled with entry points from pkg_resources
 and setuptools.

 What is a similar system that avoids too much reinventing of the
 wheel?

 The goal is to facilitate a plugable system where directories or files
 (much like with eggs) can be dropped in the appropriate directory and
 extend the system through existing extension points as well as define
 new ones.  I am most familiar with the Trac use of this and really
 like it.

 That said, I am very open to suggestions on how to use another system
 (hopefully not homegrown as I am sure many others do this).

 Thank you,
 Jason
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: datastore transaction question

2008-10-10 Thread Josh Heitzman

In this scenario Update both the User and the Thing using a single
db.put([thing, user]) the thing and the user won't be updated in the
same transaction, so the put of the thing could succeed while the put
of the user failed.

On Oct 9, 9:29 pm, johnP [EMAIL PROTECTED] wrote:
 Why not simply have the reference in the Thing, pointing to the
 User?   Then use the idiom: x = user.thing_set.fetch(1000) to get the
 User's Things?  Update both the User and the Thing using a single
 db.put([thing, user])

 johnP

 On Oct 9, 2:19 pm, Josh Heitzman [EMAIL PROTECTED] wrote:

  I ran into a similar problem with the strategy game I'm working on.
  The game world is divided up into areas and each area can have a more
  then one player's troops in it at a time.  I've modeled these with
  three entities, player, area, and areaplayer.  When a player has his
  troops do something in an area it can potentially affect the area
  state, the associated areaplayer states, and the associated player
  states.  If all of those things were in the same entity group that
  would mean the entire game state would be in the same entity group
  resulting in massive contention.  Instead each player and their home
  area is an entity group and each non-home area is an entity group.
  The areaplayer is in the entity group with the area, which is the same
  as the player for the case of the home area.

  So when a player orders troops to do something in their home area when
  no other player has troops there, its no problem as the player, the
  area, and the sole areaplayer are all in the same entity group so a
  GAE DS transaction can be used.  However, orders given to troops away
  from home or at home other players have troops there have to make
  updates to multiple entity groups.

  I'm dealing with this by via a reliable multi-entity group update
  mechanism (no rollback, but will continue processing the update across
  requests and server process instances) that I hope can be enhance into
  true multi-entity group transactions if that can actually be done will
  still staying under quotas.  I'm getting close to deploying my
  prototype with the reliable multi-entity group update mechanism, so I
  can find out how I'm doing on quotas as it is.  Then I'll know if
  there is possibly create a cross-entity group transaction mechanism.

  I really think Google needs to provide cross-entity group transactions
  though, as they'll be able to do it in native code, and thus faster
  then we'll be able to do it in Python on at the app level.

  On Oct 9, 1:20 pm, David [EMAIL PROTECTED] wrote:

   thanks for the replies.

   as i mentioned in the question, the Thing will become a product and
   could be sold to another user at a later date. A list of keys is also
   what ive been using, as a referenece property in the Thing causes the
   blobs to pulled from the data store (they can be quite large, well
   less then a mb aye ;) ) when i want to list the users current things
   (by title).

   i guess another way of looking at it is really the user is creating a
   new product. and then is trying to buy it. if the product is no longer
   wanted by anyone it can be deleted.

   i was trying to work out a was to safly trasact on the money so the
   Thing never touches the datastore if there isnt enough cash. But this
   is a unuaul case, things will be sold between users more then created.

   any thoughts? its all a learning process for me.

   On Oct 9, 8:49 pm, Bill [EMAIL PROTECTED] wrote:

 Have you seen: Entity Groups, Ancestors and Paths 
 ?http://code.google.com/appengine/docs/datastore/keysandentitygroups.html

Good point. If a Thing will never be used for another User (e.g., it's
not a product), you could make the Thing part of a User's entity group.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Why python?

2008-10-10 Thread Josh Heitzman

Python has been around for over decade so I really wouldn't call it a
new style of grammar.  There are numerous programming languages out
there that don't use c-like grammar, so Python is hardly unique in
that respect.  Python started life without objects and none of its
procedural aspects were removed when objects were added.

On Oct 9, 11:50 pm, Leo(雷傲) [EMAIL PROTECTED] wrote:
 I hate python's strange grammer! It's not neccesary to build a new
 style of grammer since the c-like grammer is so successful !

 And I think the OOP is not so great. The procedure programming
 language is still powerful and will continue its power!
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] get returning None (no exception raised) on server, but not locally

2008-10-10 Thread Josh Heitzman

I just uploaded the prototype I've been working on for the last few
weeks and I'm seeing different and unexpected behavior on the server.
The following method is run at the beginning of a transaction to
ensure that the transaction will operate on the most current state of
the entities modified.  All its doing is getting the key for an entity
and then using the key to get the current sate of the entity.  This
has been working fine locally for weeks.

def __FreshenEntities(self, names, toSetNone):
for attrName in names:
attr = getattr(self, attrName)
if attr is None:
raise AttributeError(HelperMethods.method_name(self) +
 attribute  + attrName +  not expected)
key = attr.key()
if key is None:
raise
Exception(FGBeingRootInterface.__FreshenEntities  + attrName +  key
is none)
entity = attr.get(key)
if entity is None:
entity = db.get(key)
if entity is None:
entity = db.get(str(key))
if entity is None:
raise
Exception(FGBeingRootInterface.__FreshenEntities  + attrName +  was
none after being gotten from DS using key  + str(key))
setattr(self, attrName, entity)
if getattr(self, attrName) is None:
raise
Exception(FGBeingRootInterface.__FreshenEntities self. + attrName +
 was none after being set)
toSetNone.remove(attrName)

After seeing an exception thrown on the server due to an attribute
with a None value I added the two extra attempts to get the entity in
my efforts to determine what is going on, but all three return None
without throwing an exception.

The attributes were gotten the first time just before this method was
called, so I don't understand how their keys can all of the sudden not
be valid nor why get is not throwing some kind of an exception.
Follows is the generated exception test for one occurrence and the key
string looks legitimate:

Exception: FGBeingRootInterface.__FreshenEntities _ranking was none
after being gotten from DS using key
ag53ZWJnYW1lc2J5am9zaHIjCxIMRkcwUmFua0dyb3VwGOoHDAsSCkZHMFJhbmtpbmcYAQw

Anyone encountered anything similar?

Any ideas on how to figure out what is failing?

Thanks,

Josh Heitzman
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: unique identifier for server process

2008-10-09 Thread Josh Heitzman

The state of the process is not of interest, just which instance of
many processes it is (i.e. there is no process specific state to store
and query).  I've got side entities all setup so that I can reliably
make multi-entity group changes (i.e. processing will continue across
requests, even from different clients).

I'm currently just using a random number as a process instance
identity, to determine if a change was left hanging by the same
process so its write lock (custom not GAE) can be expired immediately,
as the processes are not threaded, rather then waiting the full
timeout period.  Rather then a random number I could use an entity key
path, but that's more time consuming to generate and then it needs to
periodically have a datetime field updated so the staleness of it can
be used determined if the entity can be deleted.

I figure GAE already got some kind of process identifier around
(likely an entity in the datastore) as part of the infrastructure, so
its just a matter of providing an API to access it (I don't care if
its hashed if there some concern about security, but there shouldn't
be since one app is never supposed to be able to get any data outside
its domain).

On Oct 8, 9:27 pm, pr3d4t0r [EMAIL PROTECTED] wrote:
 On Oct 8, 6:03 pm, Josh Heitzman [EMAIL PROTECTED] wrote:

  As os.getpid is not supported by GAE, is there another API that
  provides a unique (preferably across all of GAE) identifier for the
  process?  I'd like to use this to identify if an incomplete update
  sequence (spanning entity groups, so no it can't be done in a
  transaction) was left hanging by the current process or another, as if
  it was the current it can be immediately restarted, where as if it is
  another, it'll have to wait a time period before continuing the
  sequence.

 Because of the distributed nature of App Engine, about the only way
 you have of ensuring that something committed/finished to completion
 is to use transactions and entities.  You could create an entity group
 that tracks your process(es) state and updates it as various stages
 are completed.  Remember that there is no guarantee that your process
 will run on any given machine across subsequent calls.

 Cheers,

 pr3d4t0rhttp://www.istheserverup.comhttp://www.teslatestament.com
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: datastore transaction question

2008-10-09 Thread Josh Heitzman

I ran into a similar problem with the strategy game I'm working on.
The game world is divided up into areas and each area can have a more
then one player's troops in it at a time.  I've modeled these with
three entities, player, area, and areaplayer.  When a player has his
troops do something in an area it can potentially affect the area
state, the associated areaplayer states, and the associated player
states.  If all of those things were in the same entity group that
would mean the entire game state would be in the same entity group
resulting in massive contention.  Instead each player and their home
area is an entity group and each non-home area is an entity group.
The areaplayer is in the entity group with the area, which is the same
as the player for the case of the home area.

So when a player orders troops to do something in their home area when
no other player has troops there, its no problem as the player, the
area, and the sole areaplayer are all in the same entity group so a
GAE DS transaction can be used.  However, orders given to troops away
from home or at home other players have troops there have to make
updates to multiple entity groups.

I'm dealing with this by via a reliable multi-entity group update
mechanism (no rollback, but will continue processing the update across
requests and server process instances) that I hope can be enhance into
true multi-entity group transactions if that can actually be done will
still staying under quotas.  I'm getting close to deploying my
prototype with the reliable multi-entity group update mechanism, so I
can find out how I'm doing on quotas as it is.  Then I'll know if
there is possibly create a cross-entity group transaction mechanism.

I really think Google needs to provide cross-entity group transactions
though, as they'll be able to do it in native code, and thus faster
then we'll be able to do it in Python on at the app level.

On Oct 9, 1:20 pm, David [EMAIL PROTECTED] wrote:
 thanks for the replies.

 as i mentioned in the question, the Thing will become a product and
 could be sold to another user at a later date. A list of keys is also
 what ive been using, as a referenece property in the Thing causes the
 blobs to pulled from the data store (they can be quite large, well
 less then a mb aye ;) ) when i want to list the users current things
 (by title).

 i guess another way of looking at it is really the user is creating a
 new product. and then is trying to buy it. if the product is no longer
 wanted by anyone it can be deleted.

 i was trying to work out a was to safly trasact on the money so the
 Thing never touches the datastore if there isnt enough cash. But this
 is a unuaul case, things will be sold between users more then created.

 any thoughts? its all a learning process for me.

 On Oct 9, 8:49 pm, Bill [EMAIL PROTECTED] wrote:

   Have you seen: Entity Groups, Ancestors and Paths 
   ?http://code.google.com/appengine/docs/datastore/keysandentitygroups.html

  Good point. If a Thing will never be used for another User (e.g., it's
  not a product), you could make the Thing part of a User's entity group.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Definition of Google's Infrastructure

2008-10-08 Thread Josh Heitzman

Regarding Should we design our system so that if the datacenters
where an app is deployed are vaporized, then the app keeps serving?
No, this is a much thornier issue. does this mean that an app's data
is stored in one and only one data center with no off-site backups?

I could understand that the off-site backup of an app isn't
automatically started up when there is a burp in service from a
datacenter, but if all of the data was lost from a datacenter would it
just be gone?

On Oct 7, 9:26 pm, Jon McAlister [EMAIL PROTECTED] wrote:
 Should we allow control over where the app is serving from? Sure, that
 sounds very reasonable, and is notably important for certain legal
 reasons amongst our European customers.

 Should we design our system so that if the datacenters where an app is
 deployed are vaporized, then the app keeps serving? No, this is a much
 thornier issue.

 Notably, I disagree with the claim that true inter-continental
 deployment of an app is a basic premise of modern cloud computing,
 mostly because this is really hard, and few systems actually get this
 right. Think about it from the view of a datastore write. When you
 write an entity, should that entity be immediately available on every
 continent? The reasonable answer is no, because if we guaranteed that,
 then the write latency would skyrocket. But if we don't guarantee
 that, what do we guarantee instead? If the app is presently serving
 from two continents, but we do not guarantee strong write behavior,
 how are conflicting writes then to be merged? If one datacenter
 disappears and then later comes back online, what happens to the
 writes that were halfway applied but not yet fully merged? Do we
 permit data to be dropped or do we try to reconcile this data, in
 spite of the fact that it may be hours or days stale?

 The answer to the above questions rely heavily on the specifics of the
 data and the behavior of the application, and most apps are happy to
 avoid this issue and are fine serving from one or a small number of
 locations. It's not a trivial thing to design one (or a handful of)
 generic APIs that support true inter-continental application presence,
 but this doesn't mean we'll give up trying to do so. We also welcome
 any technical suggestions you have. For instance, how would you
 presently solve this issue outside of Google App Engine?

 On Oct 7, 1:39 pm, Andrew Badera [EMAIL PROTECTED] wrote:

  That's the point of the cloud -- if you're going to make your resources
  external, remote, you need to provide a means for assuring uptime. For some
  people, different geophysical locations are required for their service.
  Obviously GAE beta shouldn't see a true NEED for this while still in beta,
  but like SSL and everything else GAE lacks, there IS a need, it IS a basic
  premise of modern cloud computing.

  On Tue, Oct 7, 2008 at 4:35 PM, Sal [EMAIL PROTECTED] wrote:

   So you want to be assured that if all the Google data centers in the
   U.S. (over 12) go down (I wonder the probability of this), your GAE
   application will still be up?

   On Oct 7, 11:35 am, Andrew Badera [EMAIL PROTECTED] wrote:
Ahh ... availability and assurance? That's half the point of the cloud.

On Tue, Oct 7, 2008 at 2:34 PM, Sal [EMAIL PROTECTED] wrote:

 Honestly, why would anyone need to deploy their GAE applications to
 international data centers?

 On Oct 7, 10:48 am, dleifker [EMAIL PROTECTED] wrote:
  What exactly does the term Google's Infrastructure imply? Once
  deployed does an application get deployed to regional (ie
  international) data centers? If not, from what general geographical
  area are the applications being served from? (US only?) And are 
  there
  plans to allow an application to be deployed to international
  locations?

--
Thanks-
- Andy Badera
- [EMAIL PROTECTED]
- (518) 641-1420

-http://higherefficiency.net
-http://changeroundup.com/

-http://flipbitsnotburgers.blogspot.com/
-http://andrew.badera.us/

- Google me:http://www.google.com/search?q=andrew+badera
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Why Google App Engine is broken and what Google must do to fix it.

2008-10-07 Thread Josh Heitzman

Assuming you can actually work around all of the limitation
simultaneously, considering the more things you work around the close
you come to the CPU time quota.

It also is not completely accurate to state that the limitations are
there to make apps safe and scalable.  For example transactions being
limited to a single entity group makes it very complicated (i.e. not
safe) to write code that needs to reliably update entities from
different groups (it isn't always possible to structure entity groups
such that everything that is needs to be updated for a request can be
all be in one entity group).

Also given the roundness of the quotas, I find it very unlikely that
the quota numbers were choosen based on an in depth analysis or a
broad sampling of data, rather the being choosen fairly arbitrarily
(possibly based to some extent on what works for google's own apps).

On Oct 7, 4:16 pm, Greg [EMAIL PROTECTED] wrote:
 Davew said it way back at the top - appengine's killer feature is
 scalability. That is what sets it apart from the other cloud systems
 out there, and it is also the root cause of most complaints (except
 the quotas, which will disappear when you get to pay for the service).

 For the application I'm working on, I'm happy to trade off lack of a
 relational database for the future gain of scalability. My guess is
 that most of you haven't had the nightmare of an application that
 suddenly became popular, and you had to become an expert at database
 replication, load balancing and multi-system maintenance overnight.
 It's a very stressful situation.

 So my advice is that if you don't need scalability, get a normal
 hosting account or EC3. Then you can have PHP, Ruby, MySQL, cron jobs,
 anything you want - problem solved. Oh, yes you are going to have to
 shell out a few buck a month.

 But if you do need scalability, then appengine is a godsend. The
 limitations are there to make it safe and scalable, not because Google
 wants to annoy you. You spend a little more time now working around
 the limitations, and save endless time later managing systems and
 capacity.

 And lastly, I believe that many of the complaints come from people
 just wanting a free hosting service, and not finding what they are
 used to. It would be a crying shame if Google listened to these people
 and turned appengine into a vanilla PHP/MySQL hosting service.
 Appengine is so much more...

 On Oct 7, 3:54 pm, Ross Ridge [EMAIL PROTECTED] wrote:

  [EMAIL PROTECTED] wrote:
   One thing you have to remember it is not what Guido or the engineers
   want. If Google App Engine is to succeed it is what the customers
   want. If it is designed as you have stated it will never recoup what
   Google has spent so far let alone down the road. Google App Engine has
   so many many limitations.  Regardless if the limitations are by design
   or not it is virtually unusable by 99% of all developers. Can Google
   make a business off the remaining 1%?

  The question of whether Google can turn Google App Engine into a
  profitable business doesn't depend on what percentage of developers
  find it useful, but whether Google exploit a competive advantage.
  Google could've started up a tradtional web hosting service using
  popular SQL databases and other techonologies and created something
  that would have had a much broader appeal.  Any one could.  That's the
  problem.  Google might be able to grab market share, but without
  anything to distiguish themselves from their competitors, a best they
  only get a marginal return on their investment.

  We can only speculate on what Google business plan for GAE is, but it
  seems pretty obvious to me that leveraging Google's own internal
  technologies is at the heart of it.  A number of limitations and
  problems with GAE stem from technologies like Big Table, Google
  Frontend and Google Apps.  Another part of their plan appears to be
  keeping support costs low, so you're not given much rope to hang
  yourself (or others).  If, in the long term, Google can't make a
  business following this plan, if it doesn't give them enough a
  competive advanage, then there's probably no way they can make the
  kind profits from a hosting service that Google's investors expect.

  (While it's not terribly relevent to this discussion, I suspect Google
  has some other goals for GAE that don't deal directly with its
  viability as a business.  One is to educate programmers in the Google
  way of doing things.  I'm sure Google has been fustrated with tons of
  amazing job applicants with advanced degrees, 10+ years of WWW
  experience, and the inability work with anything but PHP and SQL.
  Another is that they want to make even easier for people to create WWW
  sites, the sort of small little sites that through AdWords/AdSense,
  Google has made billions.)

  Ultimately, what matters is what you want and what Google is willing
  give you.   It doesn't matter what 99% developers want. The are number
  of 

[google-appengine] Re: Why Google App Engine is broken and what Google must do to fix it.

2008-10-07 Thread Josh Heitzman

Not all applications' data can be modeled such that that each piece of
data belongs to one and only one user.

On Oct 7, 10:24 pm, Ian Lewis [EMAIL PROTECTED] wrote:
 The documentation says that an entity group could be as large as a single
 user's data. It seems to me that to avoid the problem you are describing
 that it would be a good idea to do so. I have a feeling that the number of
 cases where you would need to update more than one user's data in a single
 transaction would be limited.

 2008/10/8 Josh Heitzman [EMAIL PROTECTED]



  Assuming you can actually work around all of the limitation
  simultaneously, considering the more things you work around the close
  you come to the CPU time quota.

  It also is not completely accurate to state that the limitations are
  there to make apps safe and scalable.  For example transactions being
  limited to a single entity group makes it very complicated (i.e. not
  safe) to write code that needs to reliably update entities from
  different groups (it isn't always possible to structure entity groups
  such that everything that is needs to be updated for a request can be
  all be in one entity group).

  Also given the roundness of the quotas, I find it very unlikely that
  the quota numbers were choosen based on an in depth analysis or a
  broad sampling of data, rather the being choosen fairly arbitrarily
  (possibly based to some extent on what works for google's own apps).

  On Oct 7, 4:16 pm, Greg [EMAIL PROTECTED] wrote:
   Davew said it way back at the top - appengine's killer feature is
   scalability. That is what sets it apart from the other cloud systems
   out there, and it is also the root cause of most complaints (except
   the quotas, which will disappear when you get to pay for the service).

   For the application I'm working on, I'm happy to trade off lack of a
   relational database for the future gain of scalability. My guess is
   that most of you haven't had the nightmare of an application that
   suddenly became popular, and you had to become an expert at database
   replication, load balancing and multi-system maintenance overnight.
   It's a very stressful situation.

   So my advice is that if you don't need scalability, get a normal
   hosting account or EC3. Then you can have PHP, Ruby, MySQL, cron jobs,
   anything you want - problem solved. Oh, yes you are going to have to
   shell out a few buck a month.

   But if you do need scalability, then appengine is a godsend. The
   limitations are there to make it safe and scalable, not because Google
   wants to annoy you. You spend a little more time now working around
   the limitations, and save endless time later managing systems and
   capacity.

   And lastly, I believe that many of the complaints come from people
   just wanting a free hosting service, and not finding what they are
   used to. It would be a crying shame if Google listened to these people
   and turned appengine into a vanilla PHP/MySQL hosting service.
   Appengine is so much more...

   On Oct 7, 3:54 pm, Ross Ridge [EMAIL PROTECTED] wrote:

[EMAIL PROTECTED] wrote:
 One thing you have to remember it is not what Guido or the engineers
 want. If Google App Engine is to succeed it is what the customers
 want. If it is designed as you have stated it will never recoup what
 Google has spent so far let alone down the road. Google App Engine
  has
 so many many limitations.  Regardless if the limitations are by
  design
 or not it is virtually unusable by 99% of all developers. Can Google
 make a business off the remaining 1%?

The question of whether Google can turn Google App Engine into a
profitable business doesn't depend on what percentage of developers
find it useful, but whether Google exploit a competive advantage.
Google could've started up a tradtional web hosting service using
popular SQL databases and other techonologies and created something
that would have had a much broader appeal.  Any one could.  That's the
problem.  Google might be able to grab market share, but without
anything to distiguish themselves from their competitors, a best they
only get a marginal return on their investment.

We can only speculate on what Google business plan for GAE is, but it
seems pretty obvious to me that leveraging Google's own internal
technologies is at the heart of it.  A number of limitations and
problems with GAE stem from technologies like Big Table, Google
Frontend and Google Apps.  Another part of their plan appears to be
keeping support costs low, so you're not given much rope to hang
yourself (or others).  If, in the long term, Google can't make a
business following this plan, if it doesn't give them enough a
competive advanage, then there's probably no way they can make the
kind profits from a hosting service that Google's investors expect.

(While it's not terribly relevent

[google-appengine] Re: No module named os

2008-10-06 Thread Josh Heitzman

Can't speak for Mac or this specific SDK, but on Windows when I
upgraded to an earlier SDK release, I couldn't get my app working
again on the new release until I re-imaged my hard disk to GAE SDK
free image.  This was after having uninstalled the older SDK before
installing the new one.

The problem I encountered was also module loading related.

On Oct 6, 9:51 am, Marzia Niccolai [EMAIL PROTECTED] wrote:
 Hi Ilia,

 What python installation have you set in your preferences for the
 MacLauncher?  Are you using the standard Mac python? Is this a fresh install
 of the launcher or did you just download the SDK?

 Sorry for the lame advice but have you tried uninstalling and
 re-installing?  On 10.5.3 I'm able to call 'import os' with no errors (using
 /usr/local/bin/python), so consider me officially flummoxed this morning.

 -Marzia

 On Sat, Oct 4, 2008 at 9:52 AM, Ilia Lobsanov [EMAIL PROTECTED] wrote:

  oh and this is on mac os x 10.5.5

  On Oct 4, 12:43 pm, Ilia Lobsanov [EMAIL PROTECTED] wrote:
   As of the 1.1.5 upgrade, I am getting this error when I try to access
   my app using the dev server:

   type 'exceptions.ImportError': No module named os
 args = ('No module named os',)
 message = 'No module named os'

   Any ideas?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Please include CPU quotas better db support in your simulation

2008-10-06 Thread Josh Heitzman

What would be really nice is if there was an API that could be called
to determine how close you were to the CPU quota so you could stop
processing, persist the current state, and return a Server busy,
please try again. type of page to the user that has a link to a URL
that would pickup were the last request had to stop.

Josh

On Oct 6, 10:10 am, Amir  Michail [EMAIL PROTECTED] wrote:
 Hi,

 Running into hours of downtime because of several requests taking too
 much CPU makes development almost impossible.

 If you really want to keep this penalty in place for high CPU usage,
 then please at least simulate it so people can do development
 locally.  Moreover, please provide an efficient local database -- one
 whose performance would be similar to the deployed app with one user
 at a time.

 Amir
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Why Google App Engine is broken and what Google must do to fix it.

2008-10-04 Thread Josh Heitzman

From near the bottom of
http://codecrafter.wordpress.com/2008/09/16/light-web-strategy-game-data-model-smacks-into-gae-limitations/
:

After some thought I decided my requirements for an enhanced GAE data
model layer were:

   1. Transactions spanning entity groups
   2. [redacted - more of a nice to have]
   3. Schema version management

And from earlier tonight
http://codecrafter.wordpress.com/2008/10/03/google-app-engine-scalability-that-doesnt-just-work/

* [redacted - not really broken if other issues are fixed]
* [redacted - not really broken if other issues are fixed]
* [redacted - not really broken if other issues are fixed]
* GAE can’t not tell you how many total entities there are of a
specific type and it can’t count more then 1000 entities.
* GAE limits the entities that can be processed in a single
transaction to those in the same entity group and only one request
processing instance can write to an entire entity group at a time.
* [redacted - not really broken if other issues are fixed]
* [redacted - not really broken if other issues are fixed]
* GAE’s version of Python does not include marshall or cpickle,
only the slow pickle

Of these issues, the two I'm finding most annoying is that
transactions can't span entity groups (combined with needing to keep
entity groups small to avoid put contention so the app will actually
scale) and the lack of cpickle (or something more peformant then
pickle) so I could efficiently serialize collections of small data
structures associated with another entity for which I have need to
query.

Josh Heitzman

On Oct 3, 11:52 am, Aral Balkan [EMAIL PROTECTED] wrote:
 I just wrote up a blog post summarizing the biggest issues I have with
 App Engine:http://aralbalkan.com/1504

 If you are developing real-world/commercial apps with App Engine,
 please add your thoughts to the discussion.

 Thanks,
 Aral
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Why Google App Engine is broken and what Google must do to fix it.

2008-10-04 Thread Josh Heitzman

If the entity-groups have a (single) home and there is not any global
coordination for transactions that means that there is a single
machine in charge of that entity group.  Allowing cross entity group
transactions does not require that a single machine be in charge of
all entities, it just means that the request processing process will
need to coordinate with the machines in charge of each entity or that
the machines in charge of each entity need would need to coordinate
with each other as peers.  That said I'm doubtful that entity groups
have a single home as they would need to be mirrored around to
actually scale, so it seems likely to me there is already coordination
between the nodes mirroring the same entity group.

On Oct 4, 2:53 am, David Symonds [EMAIL PROTECTED] wrote:
 On Sat, Oct 4, 2008 at 6:00 PM, Josh Heitzman [EMAIL PROTECTED] wrote:
  As far as transactions go, the global coordination is already there at
  the entity group level (if it wasn't, then there wouldn't be any
  transactions at all).  Sure it will be more costly at the entity level
  then at the group level, but it will still be less costly then
  layering the equivalent on top of the data store API in the python
  application code.  Allowing transactions spanning entity groups,
  doesn't mean that entity groups and non-spanning transactions need be
  eliminated.  Leave it the application developer to choose the
  appropriate transaction type as needed.

 You're right, application-wide transactions don't have to subsume
 entity-group transactions; you could, after all, put every entity in
 your application in a single entity group. They are, however, still
 inherently unscalable. Entity groups mean that global coordination is
 *not* required, only that there is a home for each entity group. As
 long as the entity groups are small, this responsibility can be split
 across machines quite easily.

 Dave.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Why Google App Engine is broken and what Google must do to fix it.

2008-10-04 Thread Josh Heitzman

This is a good point.  This isn't something I care about for the web
app I writing at the moment, but I've already there are other apps
I've though about doing that I definitely would not want be willing
upload non-obfuscated source code for, and I was figuring I'd just
have to host those elsewhere.

On Oct 4, 2:48 am, Davide Rognoni [EMAIL PROTECTED] wrote:
 The business is the main issues.

 Search the word 
 obfuscatehttp://evolvingtrends.wordpress.com/2008/07/23/google-app-engine-thre...

 On Oct 3, 8:52 pm, Aral Balkan [EMAIL PROTECTED] wrote:

  I just wrote up a blog post summarizing the biggest issues I have with
  App Engine:http://aralbalkan.com/1504

  If you are developing real-world/commercial apps with App Engine,
  please add your thoughts to the discussion.

  Thanks,
  Aral
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Lifestreaming app on GAE?

2008-10-04 Thread Josh Heitzman

You would need to do the data mining and machine learning as either a
side task processed a little bit at a time with each page request or
you would need a URL whose only purpose in being requested is to allow
your algorithm to process to for a bit and then you would need to have
a client that just keeps hitting that URL to keep your algorithm
processing.

You are also strictly limited to Python code removing which remove any
possibility of doing low level optimization for CPU intensive
routines.

On Oct 4, 11:46 am, Carlos Hellín [EMAIL PROTECTED] wrote:
 I'm building a lifestreaming app that will involve pulling down lots
 of feeds for lots of users, and performing data-mining, and machine
 learning algorithms on the results.
 It's a good idea to use GAE or has many limitations? for example: lack
 of cron jobs is a nuisance or for CPU intensive apps I don't know if
 it's good.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Entity Group and Transactions

2008-09-26 Thread Josh Heitzman

Your understanding is correct based on my experience.  As far as
determining entity group I think you'll just have to examine the
ancestry  of each entity in your transaction to see if they actually
have a common instance.

On Sep 25, 11:33 pm, Jamesz [EMAIL PROTECTED] wrote:
 Hi everyone,

 I just want to check my general understanding of app engine datastore
 concepts with you guys.

 After reading documentations on entity group and transactions, my
 understanding is that entities of different kind can still be in the
 same group provided that they have the same ancestors(parents or
 parents of parents). This means I can perform transactions on entities
 of different kinds.

 For clarity, this is my understanding of app engine concepts that
 roughly translates to its RDBMS equivalent
 1. Kind = Table (this is roughly the case, though entities of the same
 kind doesn't have to have the same fields)
 2. Property = Field
 3. Entity = A record
 4. Parent and Ancestors = no equivalent but is used to group entities
 into a entity group which will be stored in the same nodes which
 enables transactional executions.

 But when i applied this in practice, I get an error with Cannot
 operate on different entity groups in a transaction. So I wonder if
 I've misunderstood something, Is there a way to check what entity
 group an entity actually belongs to?

 Thanks

 James
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] SDK uninstaller / upgrade process bug

2008-09-17 Thread Josh Heitzman

I don't know what exactly the problem is but I upgraded from the 1.1.1
SDK to 1.1.3 SDK today.  I uninstalled 1.1.1 first before installed
1.1.3, but when I tried starting my app after installing 1.1.3 SDK it
failed extremely early on in the Pylons loading code.  I put up a
couple of messages on the Pylons group, but no one else encountered
the issue nor did anyone know what would be causing the behavior I was
seeing with regard to site.py failing to load.  After spending the
better part of the day debugging and trying different things
(including uninstalling 1.1.3 and reinstalling 1.1.1 and then
reversing that again), I finally threw up my hands and restored my
hard drive to an earlier image and reinstalled 1.1.1 and my app worked
fine.  I then uninstalled 1.1.1 then deleted what the uninstaller
didn't remove and installed 1.1.3 and my app again worked fine.

While searching through this group for 'load_module' I ran across a
message that also indicated someone ran into a module loading related
problem when moving from 1.1.1 to 1.1.2, so the issue doesn't seem to
have occured just on my machine.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---