You can use model_to_protobuf():
http://code.google.com/intl/en/appengine/docs/python/datastore/functions.html

eg:
def size(entity):
  return len(db.model_to_protobuf(entity).Encode())

But I'm not sure it's exactly the same size calculated by GAE.

----------
keakon



On Sat, Oct 30, 2010 at 7:28 AM, Tim Hoffman <[email protected]> wrote:
> Hi
>
> repr won't be very accurate.  In many cases you will just get <MyModel
> hashvalue> which is no where near the size of the entities.
>
> An expensive will be to serialize the entity with proto buffer as
> thats what will happen to them when they are put into the datastore,
> this approach is also redundant as it means the system will be doing
> it twice.
>
> I suggest a better strategy might be to have a look at the statistics
> in your control and and set a value based on the average entity size.
> This might need reviewing on a regular basis, but it will be a lot
> quicker. Then put batch sizes in a config file for each entity type.
>
> Rgds
>
> Tim
>
> On Oct 30, 1:53 am, Rafael Sierra <[email protected]> wrote:
>> On Fri, Oct 29, 2010 at 3:24 PM, Joshua Smith <[email protected]> 
>> wrote:
>> > I'm running into a too-large exception when I bulk put a bunch of 
>> > entities.  So obviously, I need to break up my puts into batches.  I want 
>> > to do something like this pseudo code:
>>
>> > size = 0
>> > for o in objects:
>> >  if size + o.size() > 1MB:
>> >    db.put(list)
>> >    size = 0
>> >    list = []
>> >  list.append(o)
>>
>> If you are talking about db entities, you can try repr(o), it's used
>> to send objects to cache, I saw somewhere in the documentation:
>>
>> `obj = eval(repr(obj))`
>>
>> So, you can do "if size + len(repr(o)) > 1MB:" (pseudo code)
>>
>>
>>
>> > Any idea what I could use for the "o.size()" method?  I could crawl 
>> > through all the fields and build up an estimate, but it seems likely to me 
>> > that there is a way to get the API-size of an entity more elegantly.
>>
>> > Thoughts?
>>
>> > -Joshua
>>
>> > --
>> > You received this message because you are subscribed to the Google Groups 
>> > "Google App Engine" group.
>> > To post to this group, send email to [email protected].
>> > To unsubscribe from this group, send email to 
>> > [email protected].
>> > For more options, visit this group 
>> > athttp://groups.google.com/group/google-appengine?hl=en.
>>
>> --
>> Rafael Sierrahttp://blog.rafaelsdm.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 [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/google-appengine?hl=en.
>
>

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

Reply via email to