[Zope] Help in deciding approach to Web App

Sareesh Sudhakaran aysand at hotmail.com
Sun Dec 4 16:15:13 UTC 2011



Thanks Fernando! I really appreciate the time and effort you have put in answering my query. My personality sides with Python but my hosting provider does not support Django or Zope.
As you mentioned, if I have to use mySQL, isn't it better for me to go with PHP+mySQL - easier to learn and deploy? Can I just start out with a framework like Symphony instead?
In the future I'll have to use either Python or C/C++ for my business logic and math. But the focus now is to get a prototype out, and if I'm doomed to change everything later I might as well start with the easiest and most obvious. Is this a viable starting point compared to what you have suggested? Or am I missing something?
-Sareesh
Date: Sun, 4 Dec 2011 13:28:36 +0100
From: fernando at cmartins.nl
To: aysand at hotmail.com
CC: nd at syndicat.com; zope at zope.org
Subject: Re: [Zope] Help in deciding approach to Web App



  


    
  
  
    On 12/04/2011 09:52 AM, Sareesh Sudhakaran wrote:
    
      
      
        Thanks
          Niels. Just to clarify:
        Does
            my particular instance fall under an OODBMS model or a RDBMS
            model (with ORM if necessary)? 
        

          
        

      
    
    Data modelling is a bit of an art and probably you could tackle your
    problem with any approach. I think the important is for you to
    figure out which model suits more your personality. No kidding.

    

    I would personally start with the RDBMS approach considering only
    the information you provide. Also, you can easily use zope in
    combination with a RDBMS. When you read the book, beware that zope
    has been changing from a "through the web" approach, to a typical
    file system based approach, which is a loss, but it seems to be what
    suits the needs of the zope developers.

    

    The approach I use is: 

    

    zpt page -> (one) Python Script -> (some) ZSQL Methods ->
    MySQL

    

    The zpt defines the layout of the pages, the ZSQL Methods retrieve
    the data needed and the Python script massages the data to make it
    suitable for the ZPT page. Or the other way around, from user input
    in a form to storage in the database.

    

    The advantage of the relational approach is that it is a very well
    understood model and although different people will still come to
    different models there are sufficient objective guidelines out there
    (e.g., the normalization rules, and then criteria for when to
    denormalise) to help you along. Furthermore, there are lots of
    people in db-related forums that can help you. 

    

    Also, RDBMS provides you with a "standard" query language, SQL,
    which plenty of systems and tools can use. In general, RDBMS gives
    you the safest approach to keep your data and not loose it when you
    need to migrate either the front-end or the back-end. This language
    is very powerful and can avoid you a lot of low level programming. 

    

    However, plenty of people can not deal well with SQL because it
    follows a paradigm so different from the classic imperative
    programming. With SQL, you specify the "what", with the other
    languages you specify the "how". The advantage of the "what" is that
    you can do a lot of data processing in a few lines of code. The
    problem with the "what" is that because you don't know the "how" of
    it, you feel you don't have control and you are led to say the
    language is "obscure" or "unreadable". 

    

    However, even if you are not comfortable with the "what" (you have
    to try to know), you can still rely on an library like SQLAlchemy to
    keep you a bit in the comfort zone of the "how". So instead of
    learning SQL, you need to learn the API of a specific library. Your
    choice. I recommend the first by far.

    

    The real main issue with Relational is that it is a highly
    structured data model. It allows you to keep high quality data but
    if you don't get it right soon enough in the development cycle, some
    later changes can have a huge impact in the application, requiring
    rewrites. Furthermore, it works the best when you have many objects
    with the same properties. If you have many entities all different
    from each other (the tools in your case, maybe), then maybe a OODBMS
    might be better. But here, there is no standard language, or
    standard whatever. Perosnally, I would avoid as much as possible to
    put data in something like ZODB (I use it merely to store and manage
    the application).

    

    The problem with your specific case is that it does not seem to be a
    typical case of books and authors, which might be a risk for someone
    without experience. The issue "Tool A might have only three fixed
    rpms - 100, 200 and 500, but Tool B might have rpms from 20 to
    2000", is indeed tricky. I suspect in general the needs of your
    system will be too specific to be able to rely only on SQL queries.
    You would need to put a lot of intelligence in the data (really
    highly structured) and it might become unmanageable or not scalable.
    

    

    I guess you will need to put a lot of intelligence in the Python
    Script. So, the ZSQL retrieves the relevant tool data and then makes
    the tool choice. The knowledge of the meaning of the attributes is
    maintained in programming.

    

    I should say I am not totally sure the Python Script is the best
    approach here, in terms of management facilities. But Python is
    surely a very good language due to its readability. However, you
    might need to use External methods or a more typical file-system
    based Python approach. 

    

    Or maybe you actually need to create a Domain Specific Language to
    encode the intelligence needed for your tool selection process. If
    your python code becomes repetitive, with patterns showing up, then
    a DSL might be a good approach, but this might be too much
    engineering for you at this stage. It looks like you are in a
    typical CIM scenario and I remember handling a similar problem 20
    years ago. I vaguely remember at that time to use custom graph
    structures in C and the the intelligence was coded in Lisp/Scheme.
    So, there is a big range of solutions to try out :)

    

    If you have time, then the simple approach 

    

    zpt page -> (one) Python Script -> (some) ZSQL Methods ->
    MySQL database

    

    might be a good starting point. You should not need to spend much
    time to implement a prototype using this approach. In the worse case
    scenario it helps you understand better your problem and what could
    be a better approach with little investment. Essentially you try the
    classical approach and if it does not work well, either you are
    doing something wrong, or you have a better understanding of your
    needs and where to go.

    

    Good luck,

    Fernando

    
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.zope.org/pipermail/zope/attachments/20111204/82dedc39/attachment.html>


More information about the Zope mailing list