I\'m working at a site similar to Foursquare and Yelp, with approximately 100000
ID: 650553 • Letter: I
Question
I'm working at a site similar to Foursquare and Yelp, with approximately 100000 unique requests each week that generates content, growing steadily. We are currently using:
Seam as Java web framework.
MySQL as DB
Hibernate as ORM
Hibernate Search as Index
EhCache for Caching.
Since our site is slowly growing out of the current setup and has a lot of legacy code, it is time for us to start thinking about a major refactoring/changing setup.
Web framework
We are not ready to change the language but we are leaning towards Spring Web Framework, since:
Seam is no more.
Almost all of us have worked with Spring and liked it.
DB and ORM
We have done a little research and we are thinking about MongoDB.
Index
Do we need to have a separate Index if we use MongoDB?
Cache
?
So my question is basically:
If you take Spring Web Framework and MongoDB into consideration, how would a good setup be for a web application that is growing and handles a lot of logged in users generating input and performing searches?
Explanation / Answer
You'll want to do some serious research.
Overall
It doesn't sounds like you have a clear idea of the performance profile of your application/tech stack. Where are the pain points? Why does it need replacing?
Take measurements first so that you've got something to measure improvements against going forward.
This will help you avoid adding in unecessary technologies/layers that may help less than you think and in some cases even hinder!
Web Framework Replacement
Have a look at Matt Raible's comparison presentation on JVM Web Frameworks and then drop the 20 criteria he uses into a spreadsheet and apply weightings to them according to your functional and non-functional requirements.
Pick 2-3 that seem to fit your requirements best and prototype some pages/UI/Ux/workflow with those. Probably spend 2-3 days on each as a minimum (1 week if you can get away with it)
Data Store
What are they chracteristics you need from this data store? Fast read, slow write? Something else? Distributed? Transactional?
Does it need to be Object based? Relational?
Once you've asked and answered some of these questions then you need to pick 2-3 datastores and prototype with them, much like you would with the web framework choice. Some of the popular NoSQL DBs at the moment are MongoDB (although it might still have that global lock problem, not sure), Cassandra and CouchDB. But don't take anyone's else's word for it. Measure it yourself.
Cloud provisioning
As an aside, have you looked into the financial use case for this? With your rate of expansion, some private/public cloud options could really help you out.
Hope That Helps (HTH) a little :-)