views:

201

answers:

3

I am looking to produce a site similar to a venue "What's on" site.

The plan is that the venues can register an account to the site and then through their own 'admin' section upload/post all their latest events that are on. I am hoping that very large number of venues will sign up and each have a large number of events thus producing a very big dataset.

I then want end users to be able to search all the venues which have a particular type of event through the site, and also importantly via mobile iphone/android applications.

I am initially hosting this system on a resource limited VPS which I have to scale up all factors in order to 'upgrade' (I can't just whack loads of RAM in without paying for extra bandwidth/disk space/etc. too), but I do plan to upgrade as required.

After much research, the two best options I am looking at for implementation are Zope/Plone or Django+PostgreSQL (site from scratch), neither of which I have used before.

My question is, in people's experience, 'What is most appropriate for this kind of site platform and dataset.'

I can afford to put in much of my time learning either of these from scratch, but I can't afford to have to change and start again from scratch with a different framework.

So to summarize I am aiming for (please let me know if it's unrealistic):

  • Low initial cost. (In trade for time input)
  • A venue user admin section for data addition.
  • A user Login to post reviews/comments.
  • Scalable.
  • Ultimately large dataset.
  • Runs fast on limited resources.
  • Use a future-proof framework.
  • Relatively easy to maintain/extend data model over time.
A: 

"Relatively easy to maintain/extend data model over time" would be the argument to use Django. I'm not an expert in one of both frameworks, but have some experiences with both. I think it's quite hard to modify and extend the Zope object model if you are new to Zope. I really like the architecture of Zope and Zeo would probably very helful to scale your app, but without prior Zope knowledge I would go for Django.

Achim
+2  A: 

You must prioritize your requirements.

For example, "Ultimately large dataset" isn't really very interesting. If you get to "large", that's a good thing. Starting out with "large" as the number one requirement (when you don't have any actual data at all) is limiting. It creates complexity where you don't really need any.

Also, "Use a future-proof framework" is impossible. Nothing is future-proof. Nothing. Every day there is a non-zero probability that someone will create a new framework so supremely cool that all previous frameworks are seen to be stupid and are immediately discarded and ignored.

You need to "future-proof" your data. Not your framework. That's easy.

Revised Ranking. Here's my suggested ranking of your requirements.

  1. Low initial cost. (In trade for time input)
  2. Scalable.
  3. Relatively easy to maintain/extend data model over time.
  4. Runs fast on limited resources.

These are not interesting:

  • Use a future-proof framework. There's no such thing.
  • Ultimately large dataset. Wait until you have some sense if "large". Also this is the definition of "scalable". Don't include the requirement twice.

These are requirements for your app, not a framework.

  • A venue user admin section for data addition.
  • A user Login to post reviews/comments.

Conclusion. These seem to point toward Django. Cost is low, it scales well, the model is easy to maintain, and it runs fast if you segregate static content (images, .css files, etc.) from dynamic content.

Also, Django's built-in admin can probably handle the "venue user admin " (It's not clear precisely what this is, but it's probably what Django's admin does.)

Finally, user login (and related security) is already part of Django. You still have to write (or find) an app for reviews/comments.

S.Lott
A: 

Relatively easy to maintain/extend data model over time

This, for me would suggest Zope, as the 'Zope Object DataBase' allows you to chuck data objects around in Python to your hearts content.

[Django] runs fast if you segregate static content (images, .css files, etc.) from dynamic content

Zope/Plone has a mostly unfounded reputation for being slow, segregation of static content as in Django has the same benefit in Zope/Plone.

Finally, user login (and related security) is already part of Django.

Zope3 and Plone also have very strong built in user login and management components and are both easily expanded via the Component Architecture.

Low initial cost. (In trade for time input)

A difficult one this. Plone would have a basic site up, running and skinned in a few days. However, in my experience, Plone sites are very RAM hungry, even small sites quickly use up the basic amounts of RAM (256/512mb) in most cheap virtual hosts.

A bespoke Zope3 site, might be better, but would take a much longer to learn and get running if you are unfamiliar with Zope. (I'd suggest starting with Grok)

Both technologies suffer from the so called 'Z shape learning curve'. It's very easy to get up and running, but there a couple of huge knowledge speed bumps to get over further down the line (although its well worth it IMHO).

(Note: I have experience running a large Zope3 site and a few small business Plone/Zope2 sites, but not of using Django)

Jon Hadley