views:

507

answers:

2

I'm building a Route Planner Webapp using Spring/Hibernate/Tomcat and a mysql database, I have a database containing read only data, such as Bus Stop Coordinates, Bus times which is never updated. I'm trying to make the app run faster, each time the application is run it will preform approx 1000 reads to the database to calculate a route.

I have setup a Ehcache which greatly improves the read from database times. I'm now setting terracotta + Ehcache distributed caching to share the cache with multiple Tomcat JVMs. This seems a bit complicated. I've tried memcached but it was not performing as fast as ehcache.

I'm wondering if a MongoDb or Redis would be better suited. I have no experience with nosql but I would appreciate if anyone has any ideas. What i need is quick access to the read only database.

+1  A: 

I have setup a Ehcache which greatly improves the read from database times. I'm now setting terracotta + Ehcache distributed caching to share the cache with multiple Tomcat JVMs. This seems a bit complicated.

Since your data are read-only, I'm tempted to say that you could live without distributed and replicated caching, unless the overhead of the initial load of caches is that critical (and in that case, it is not that hard to configure Ehcache, you just need to know where you go). So, if you think you really need this, maybe ask for more specific guidance.

I'm wondering if a MongoDb or Redis would be better suited. I have no experience with nosql but I would appreciate if anyone has any ideas. What i need is quick access to the read only database.

First of all, if you go the NoSQL way, forget Hibernate (might not be an issue though). Secondly, I really wonder what is more complicated: (not) configuring Ehcache to be distributed (I'm still not convinced you need it) or changing your approach for something radically different (that the VAST majority of enterprise business don't need). Thirdly, nothing will be faster than reading data from memory in the same JVM.

To summarize: I would 1. consider not using distributed caching (and say goodbye to the configuration problem) or 2. configure Ehcache for distributed caching (I think this is less complicated than changing your whole approach).

Pascal Thivent
Thanks a lot Pascal! Ideally i would like when servlet requests are submitted to find a shortest route, the route can be calculated quickly using a data already stored in memory from a Ehcache. What do you think would be the best way to achieve this?
paddydub
@paddydub This sounds just fine and doable with your current approach (hibernate + ehcache). Did I miss something?
Pascal Thivent
+1  A: 

Hi there, if you want to try routing, you even might look at Neo4j, see the blog on using an A* algo for

Here's Java code (by me) for that blog entry: http://github.com/neo4j-examples/java-astar-routing
nawroth
thanks i'm thinking this is more suited to my app, i'm going to try it out
paddydub