Hello everyone.

I need some help defining the architecture for an application. We already 
have something in place, but the size of the the users data files is making 
the site very unresponsive. The app works as follows:


   1. The user uploads a csv file
   2. The user file is read to a table for further processing
   3. The user previews the data I read from his file (to see if everything 
   is ok)
   4. If data is ok he clicks a button which will make us generate an xml 
   (using some of the data he uploaded) and send the xml to a web service
   5. The web service is not ours, and we must send the xml files one at a 
   time (though we can send hundreds simultaneously)
   6. The web service returns data, and we store that data into the db
   7. Once done we offer a print friendly version of the final data

So currently we are doing the following:

   1. Receive a file, and once saved we process it with web2py built in 
   import from csv.
   2. Once data has been read we show a view with all the rows and a button 
   to start the process
   3. Using js we send groups of 20 rows at a time through ajax, to be 
   processed (to xml) and sent to the web service
   4. Each ajax call returns js code to update a progress bar

Originally this files were suppose to consist of hundreds hardly a thousand 
row, but in the end we have files with 15000 rows and the average is about 
4000. Incredibly the view (even with 15000 rows and js) works well. But the 
site becomes quite unresponsive (especially because there are normally a 
dozen or so users doing the same thing simultaneously).

We have already done as many optimizations as we know (use migrate=False 
for db, call session.forget in ajax controller functions, byte compile the 
code) but it still is way too slow. So we are making some heavy changes. I 
want to try to use the scheduler and workers to do this job, but I fear it 
will generate even more db queries and make things worse. So I would like 
some suggestions on how to tackle this problem??

Is scheduler the way to go? An if so should I make a task for every xml and 
webservice call (this seems like a bad idea to me). Or should I group them 
in chunks of an arbitrary size (e.g. 50)? And if I make this change will I 
be able to display the progress of the process?

Thanks for all the help. Good day.

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to