Thanks for the clarification. On Wednesday, 8 August 2012 10:09:27 UTC-5, Felipe Meirelles wrote: > > Sorry about the URL confusion. The processing on web2py version is done on > /queues/position, while in the django one is done in /api/position as I > didnt implemented queues on the django version. > > Json dumps and loads are only used on web2py version, but not using the > shipped simplejson (it realy had a performace issue) its done using native > json lib for python 2.7. > > I just posted the django performance for a matter of rough comparsion, as > the code and the aproch for both are sightly diferent, so the performance > should be too. The main comparsion is about web2py with or without the > models. > > On Wed, Aug 8, 2012 at 11:59 AM, Massimo Di Pierro > <massimo....@gmail.com<javascript:> > > wrote: > >> I do not understand. When you compare Django vs web2p[y performance, you >> seem to be comparing the MCycles for >> /api/1.0/position<https://appengine.google.com/logs?version_id=production.359553040742132058&app_id=s%7Egps-holdsat-hrd&filter_type=labels&filter=path%3A%22%2Fapi%2F1.0%2Fposition%22&severity_level_override=1&view=Search> >> (in >> case of Django) with >> /main/queues/position<https://appengine.google.com/logs?version_id=testing.360875204440667710&app_id=s%7Eapache-felipemeirelles&filter_type=labels&filter=path%3A%22%2Fmain%2Fqueues%2Fposition%22&severity_level_override=1&view=Search> >> (in >> the case of web2py). Shouldn't you be comparing with >> /main/api/position<https://appengine.google.com/logs?version_id=testing.360875204440667710&app_id=s%7Eapache-felipemeirelles&filter_type=labels&filter=path%3A%22%2Fmain%2Fapi%2Fposition%22&severity_level_override=1&view=Search>? >> >> Or perhaps the names are reversed? >> >> Do they perform the same DB IO? Do they both store sessions in DB (web2py >> does)? >> >> It is likely Django uses simplejson binary while web2py (for portability) >> only ships with simplejson in pure python. This may be another performance >> loss if you use json a lot. We need to fix this at the web2py level. >> >> Massimo >> >> On Wednesday, 8 August 2012 08:06:05 UTC-5, Felipe Meirelles wrote: >>> >>> Well, after 24h running the new model less code I think I can post some >>> data: >>> >>> First of all I'll explain my application archtecture: >>> >>> I have a cloud server gattering information from around 150 gps on some >>> asserts. Each assert sends information every 30s, and some sends additional >>> reading information, wich give me a total arround 150k request/day. This >>> cloud server is integrated with appengine trought a REST API, speaching >>> Json to each other. >>> >>> Before the model less refactor I had the following status: >>> *Current Load [image: >>> help]<https://developers.google.com/appengine/kb/general#currentload> >>> * URI Req/Seccurrent Requestslast 6 hrs Runtime MCycleslast hr Avg >>> Latency >>> /main/queues/position<https://appengine.google.com/logs?version_id=testing.360875204440667710&app_id=s%7Eapache-felipemeirelles&filter_type=labels&filter=path%3A%22%2Fmain%2Fqueues%2Fposition%22&severity_level_override=1&view=Search> >>> 1.2 48.78K 351 1200ms >>> /main/api/position<https://appengine.google.com/logs?version_id=testing.360875204440667710&app_id=s%7Eapache-felipemeirelles&filter_type=labels&filter=path%3A%22%2Fmain%2Fapi%2Fposition%22&severity_level_override=1&view=Search> >>> 0.9 44.37K 267 600 ms >>> As you can see, I have controllers, the /api/ receives a call from the >>> cloud server and enqueues a process request on appengine (this is a very >>> simple controller, no data processing at all), and the /queues/ wich >>> actualy process the data, make some inserts/updates and handle the memcache. >>> >>> After the refactor: >>> >>> *Current Load [image: >>> help]<https://developers.google.com/appengine/kb/general#currentload> >>> * URI Req/Seccurrent Requestslast 6 hrs Runtime MCycleslast hr Avg >>> Latency >>> /main/queues/position<https://appengine.google.com/logs?version_id=testing.360875204440667710&app_id=s%7Eapache-felipemeirelles&filter_type=labels&filter=path%3A%22%2Fmain%2Fqueues%2Fposition%22&severity_level_override=1&view=Search> >>> 1.1 49.34K 180 404 ms >>> /main/api/position<https://appengine.google.com/logs?version_id=testing.360875204440667710&app_id=s%7Eapache-felipemeirelles&filter_type=labels&filter=path%3A%22%2Fmain%2Fapi%2Fposition%22&severity_level_override=1&view=Search> >>> 0.9 44.80K 78 139 ms >>> Im only posting the position URL becouse its the most complex and most >>> hitted. >>> >>> In comparsion, the Django project (same logic, I have it still runing >>> while the web2py one is not ready): >>> >>> *Current Load [image: >>> help]<https://developers.google.com/appengine/kb/general#currentload> >>> * URI Req/Seccurrent Requestslast 6 hrs Runtime MCycleslast hr Avg >>> Latencylast hr >>> /api/1.0/position<https://appengine.google.com/logs?version_id=production.359553040742132058&app_id=s%7Egps-holdsat-hrd&filter_type=labels&filter=path%3A%22%2Fapi%2F1.0%2Fposition%22&severity_level_override=1&view=Search> >>> 0.8 50.13K 92 406 ms >>> On the django version I didnt had the queue yet, so this one URL >>> proccess the request at all. >>> >>> Final toughts are, after a model less aproch, I reached half of the >>> performance from django (still, some parts of the code are sightly >>> diferent, and a lot more Json conversion and memcache is used in favour of >>> reducing datastore access, wich can explain the loss on processing >>> performance). Also, after the model less aproch, compared to web2py it >>> self, I got a huge performance gain, and expect a solid cost reduction >>> (I'll post the cost reduction latter, when appengine consolidates the >>> billing). >>> >>> Thanks you all for sharing your toughts. >>> >>> On Tuesday, August 7, 2012 6:56:15 PM UTC-3, Massimo Di Pierro wrote: >>>> >>>> Please share you benchmarks when you think you are done. >>>> >>>> On Tuesday, 7 August 2012 14:29:51 UTC-5, Felipe Meirelles wrote: >>>>> >>>>> Well, I'm still in the middle of tests but all points to a huge drop >>>>> on cpu usage using a model less aproch. I've made, in a few days ill post >>>>> numbers, but the cpu_ms is arround half of it was. >>>>> >>>>> I've set all db.define_table() in separete models, and just include >>>>> them where i use them. Also, all the configs from 0.py were split in >>>>> files, >>>>> and are just called when I need them. >>>>> >>>>> Thanks for the help! >>>>> >>>>> On Tue, Aug 7, 2012 at 4:25 PM, Anthony <abas...@gmail.com> wrote: >>>>> >>>>>> The app I'm developing is highly dependent on auth. >>>>>>> >>>>>>> Does it mean that any request that uses auth won't be faster than >>>>>>> 200ms on GAE? >>>>>>> >>>>>> >>>>>> Note, if you're just checking for login, I don't think you need to >>>>>> call auth.define_tables() (that should only be needed for registration, >>>>>> login, and checking permissions/membership). Also, make sure to use >>>>>> auth.define_tables(migrate=**False) to avoid migrations on the auth >>>>>> tables in production. >>>>>> >>>>>> Anthony >>>>>> >>>>>> -- >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Att, >>>>> Felipe Meirelles. >>>>> >>>>> -- >> >> >> >> > > > > -- > Att, > Felipe Meirelles. > >
--