Shared publicly  - 
 
App Engine 1.6.4 is out. NDB is now fully supported!
64
17
Brett Slatkin's profile photoThomas Schranz's profile photoChristian Johnson's profile photoSvein Ove Aas's profile photo
28 comments
 
+Guido van Rossum do you recommend looking into switching existing apps to NDB/building new apps with NDB? Is the caching faster than using existing MemCache, or should we still use MemCache with it?
 
+Ruben Orduz: Yes but they want people to develop services on the platform but if they do not support the lang you develop in what kind of PaaS is it?
 
+Christian Johnson from what I've read of the docs (waiting to migrate myself), the caching uses both in-context / per request instance memory and Memcache for gets but not queries/other things. It removes the need to cache your gets by id/key_name and will be faster in case where you attempt to get the same entity from the datastore in the same request (since it will be coming from memory instead of Memcache). Gets in later requests will pull from Memcache automatically unless an entity update occurred (or it was purged from memcache from usage).

I had my own strategy doing this hybrid memory/Memcache caching already, but this integrated approach is great and should speed up a lot of things for free (and reduce billing by reducing the number of read/small operation costs when it's in one of the caches).

The reason I'm waiting to switch or start new projects using NDB is as of now MapReduce is not supported (which Guido updated the issue and said it would be coming in 1.6.5/late April) - http://goo.gl/G4v4I

There are also a few places that need better documentation or tweaks from defaults, such as using Appstats (increase max stacktrace size: http://goo.gl/zJ9qI), using the BulkLoader (mainly docs it appears - http://goo.gl/C0LsN), and probably a few others.

I'm waiting to rewrite some existing projects and start a new one on Python 2.7 and NDB until MapReduce is supported in 2.7/NDB (MapReduce built-in was removed from 2.7 in 1.6.2 - http://goo.gl/pbgXm). Not sure when it's scheduled to be returned.
 
Wait... there are people who use PHP when they don't have to?
 
Not everyone discovered python - yet
 
+Sean Lynch hey sean, haven't tried this but since NDB is just an API that access the same datastore, wouldn't it be possible to use the old datastore api to do the stuff you need in MapReduce, but for the remaining portions of your app, just use the NDB api? Or does mixing api's not work?
 
NDB is awesome. I recommend it to everyone. Moving existing projects isn't too hard. The caching behavior is correct and much easier to manage, so you get a bunch of speed for free. And then you can scale up by going async, which NDB makes possible while keeping the code highly readable.
 
+Hadi Laasi To be honest I hadn't read as much into NDB as I should have (and have done tonight). I was thinking I would need to update all my stored models to use the ndb base class, but this is not true. It does look like I could duplicate my models, one with the db.Model and one with ndb.Model and use the db.Model ones when I need to MapReduce.

It looks like I'll need to wait longer for 2.7/MapReduce support, but I'm really exited for the "free" caching I get from ndb.

I currently run into some free quota exhaustion due to ReferenceProperties getting dereferenced when serialized to json (there needed in the response), but ndb should help with this by pulling from memcache/memory when it can. At some point I need to run a MapReduce job on my models and denormalize the properties I'm using from the ReferenceProperty, but I'd rather not if at all possible.
 
Choose your languages based on what Facebook does, that's what I always say!
 
Why not Google tries pretty hard to copy them? :P
 
Python, ridiculously fast? Strongly typed?
Are we talking about the same language?

I can understand making a joke, but someone might believe you. We're not all Guido.
 
What do the leters NDB mean? It never explains the acronym on the documentation.
 
Don't forget #golang is on appengine too! Everyone mentions Java and Python like they are the only things being used, but I am having a great time using Go with appengine. Built in concurrency like no other, and I'm loving the speed of a compiled language :)
 
+Roel Cagantas You're right, of course. I usually picture something like Haskell, but Python is strongly typed, just not statically.
I would still question the notion that it's a fast language, though. :P
 
/me wonders where app engine devs work, mv campus or somewhere else?
 
I'm migrating our project to ndb at the moment and it feels wonderful. Thanks a lot!
 
Is it worth moving to ndb? What's the speed difference between ndb and db? Also, is ndb using less quotas?
Add a comment...