Question: 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.

Answer: 
if you want to try routing, you even might look at Neo4j, see [the blog on using an A\* algo for](http://blogs.neotechnology.com/peter/2010/04/cool-spatial-algos-with-neo4j-part1-routing-with-a.html)
First of all mongodb is not a cache per se. its a persistent data store just like mysql is a persistent data store.

so now your question boils down to "should i use ehcache or redis". having used ehcache i can tell you that is a pretty good solution for a distributed cache that does replication/clustering, cache invalidation, monitoring and instrumentation capability.

since your data is read only, a simple distributed map like hazelcast would work as well. its pretty simple to use.