2010-05-19 26 views
12

Estoy construyendo un planificador de rutas Webapp utilizando Spring/Hibernate/Tomcat y una base de datos mysql, Tengo una base de datos que contiene datos de solo lectura, como las coordenadas de paradas de autobús, horarios de autobuses que nunca se actualizan. Estoy tratando de hacer que la aplicación se ejecute más rápido, cada vez que se ejecuta la aplicación preformará aproximadamente 1000 lecturas a la base de datos para calcular una ruta.¿Caché de NoSQL o Ehcache?

He configurado un Ehcache que mejora mucho la lectura de los tiempos de la base de datos. Ahora estoy configurando el caché distribuido de terracota + Ehcache para compartir el caché con múltiples JVM de Tomcat. Esto parece un poco complicado. Intenté con memcached pero no funcionaba tan rápido como ehcache.

Me pregunto si un MongoDb o Redis sería más adecuado. No tengo experiencia con nosql pero agradecería si alguien tiene alguna idea. Lo que necesito es un acceso rápido a la base de datos de solo lectura.

Respuesta

7

si quieres probar el enrutamiento, incluso se podría hacer en Neo4j, ver the blog on using an A* algo for

+1

Aquí está el código Java (por mí) para esa entrada de blog: http://github.com/neo4j-examples/java-astar-routing – nawroth

+0

gracias, estoy convencido de que esto es más adecuado para mi aplicación, voy a intentarlo fuera – patrickandroid

12

He configurado un Ehcache que mejora mucho la lectura de los tiempos de la base de datos. Ahora estoy configurando caché distribuido de terracota + Ehcache para compartir el caché con múltiples JVM de Tomcat. Esto parece un poco complicado.

Dado que son de sólo lectura de sus datos, estoy tentado a decir que usted podría vivir sin distributed and replicated caching, a menos que la sobrecarga de la carga inicial de cachés es que crítico (y en ese caso, no es ese difícil de configurar Ehcache, solo necesitas saber a dónde vas). Entonces, si crees que realmente lo necesitas, tal vez solicites una guía más específica.

Me pregunto si un MongoDb o Redis sería más adecuado. No tengo experiencia con nosql pero agradecería si alguien tiene alguna idea. Lo que necesito es un acceso rápido a la base de datos de solo lectura.

En primer lugar, si va por el camino NoSQL, olvide Hibernate (sin embargo, podría no ser un problema). En segundo lugar, realmente me pregunto qué es más complicado: (no) configurar Ehcache para que se distribuya (aún no estoy convencido de que lo necesite) o cambiar su enfoque por algo radicalmente diferente (que la mayoría de VAST empresarial no necesita) . En tercer lugar, nada será más rápido que leer datos de la memoria en la misma JVM.

Para resumir: 1. Considero no utilizar el almacenamiento en caché distribuido (y decir adiós al problema de configuración) o 2. configurar Ehcache para el almacenamiento en caché distribuido (creo que esto es menos complicado que cambiar todo el enfoque).

+0

Muchas gracias Pascal! Idealmente, me gustaría que cuando se envíen las solicitudes de servlet para encontrar una ruta más corta, , la ruta se pueda calcular rápidamente utilizando datos ya almacenados en la memoria de un Ehcache.¿Cuál crees que sería la mejor manera de lograr esto? – patrickandroid

+1

@paddydub Esto suena perfecto y factible con su enfoque actual (hibernación + ehcache). ¿Me he perdido algo? –

1

En primer lugar mongodb no es una caché de por sí. es un almacén de datos persistente al igual que mysql es un almacén de datos persistente.

así que ahora su pregunta se reduce a "¿debo usar ehcache o redis". Después de haber utilizado ehcache, puedo decir que es una solución bastante buena para un caché distribuido que hace replicación/clustering, invalidación de caché, monitoreo y capacidad de instrumentación.

dado que sus datos son de solo lectura, un simple mapa distribuido como Hazelcast también funcionaría. es bastante simple de usar.