Hi, I want to build a real estate web application for listing properties (for sale, for lease, etc).
Can you help me decide on what technologies I should use to build such an application? Let me point out that I am good with Java/J2EE + JQuery for front end but somehow I feel that is not the best solution for such an application.
Should I store "real estate property" details in usual database (like MySql) or document oriented one (like MongoDB or CouchDB)?
What should i use for middle tier..
Ruby on Rails
For a system like this which can be implemented using just about any modern language and its framework ecosystem, the technology stack can't be decided without evaluating other aspects - like learning capabilities, development time and maintainability.
1. If time is a constraint, then you're better off using something you're proficient in; or something which is fairly known to you, and which you are confident of working in.
2. Whatever languages you're familiar with, first check out available and popular CMSes in those languages, rather than a DIY solution. The productivity gains from using these CMSes is very high.
For example, if familiar with PHP, Wordpress is endlessly customizable and even provides real estate plugins like this one. WP has excellent documentation, and writing or understanding core code or plugin code is not very difficult if you have some familiarity with PHP. WP itself uses jQuery extensively, and it's easy to write ajaxy pages if writing your own plugin.
I'm sure other popular PHP CMSes like Drupal will have something similar, though I'm not very familiar with them. Such plugins with extensive functionalities out of the box are very common in PHP world (unlike java despite its super duper EJB standard and its fantasies of reusable components!)
Perhaps other language CMSes like python/django-based CMS, or Rails-based CMS, or even Java-based like OpenCMS/Alfresco/Liferay may have such ready made components; or atleast, the capability to easily integrate such components into a readymade CMS environment.
Additionally, CMSes give nonfunctional but necessary features like login, security and SEO (for public facing websites) out of the box.
So bottom line, check out the CMSes.
3. To some extent, using a blackbox like a CMS will lock in your architecture to one single RDBMS like MySQL; breaking this to go with a NoSQL solution or even another RDBMS would require extensive customization. Normally, people start off with a NoSQL solution only if the data model is known to be unstructured or uneven, is likely to change very frequently, or well analyzed performance requirements dictate their need.
Everybody of course wants scalable, but depending on trends of user volume, it may not really be necessary from the start. Besides, using NoSQL is pointless if the layers above it can't scale-out. So, in such cases, you should abstract the data access through a well defined layer which can later be switched to NoSQL without affecting other layers. This can be quite tough when using blackbox CMSes and available plugins (atleast the PHP ones - I don't know about others), unless you're writing your own plugin.
4. From functionality viewpoint, the only "business logic" of importance I can think of is Search. A listings site with a huge database needs good search capabilities.
For that, I'd recommend using a dedicated search engine like Apache Solr.
Solr gives you drilldown searching (for example, your users can filter by area or city or other attributes, just like ebay or amazon) and it also gives you capabilities like spatial search (for example, your users can search for all listings which are within x kms of a point on a map).
5. Building a solution from scratch, using java/javaee or other familiar language would be my very last option - requires too much time.
For your detailed explanation and the options available. You have given me light on different options available.
I absolutely agree on your last point that building a solution from scratch using java/j2ee would be the last option. That was the reason I posted this question as to find out what else is available to use.
subject: What technologies should I use for my web application project?