12

我正在使用 Spring/Hibernate/Tomcat 和 mysql 数据库构建 Route Planner Webapp,我有一个包含只读数据的数据库,例如巴士站坐标、巴士时间,这些数据永远不会更新。我试图让应用程序运行得更快,每次应用程序运行时,它都会对数据库进行大约 1000 次读取以计算路线。

我已经设置了一个 Ehcache,它极大地改善了从数据库读取的时间。我现在正在设置 terracotta + Ehcache 分布式缓存以与多个 Tomcat JVM 共享缓存。这似乎有点复杂。我已经尝试过 memcached,但它的执行速度不如 ehcache。

我想知道 MongoDb 或 Redis 是否更适合。我没有使用 nosql 的经验,但如果有人有任何想法,我将不胜感激。我需要的是快速访问只读数据库。

4

3 回答 3

12

我已经设置了一个 Ehcache,它极大地改善了从数据库读取的时间。我现在正在设置 terracotta + Ehcache 分布式缓存以与多个 Tomcat JVM 共享缓存。这似乎有点复杂。

由于您的数据是只读的,我很想说您可以在没有分布式和复制缓存的情况下生活,除非缓存初始加载的开销非常关键(在这种情况下,配置 Ehcache 并不难,你只需要知道你去哪里)。所以,如果你认为你真的需要这个,也许可以要求更具体的指导。

我想知道 MongoDb 或 Redis 是否更适合。我没有使用 nosql 的经验,但如果有人有任何想法,我将不胜感激。我需要的是快速访问只读数据库。

首先,如果您采用 NoSQL 方式,请忘记 Hibernate(尽管可能不是问题)。其次,我真的想知道什么更复杂:(不是)将 Ehcache 配置为分布式(我仍然不相信你需要它)或改变你的方法以实现完全不同的东西(绝大多数企业业务不需要) . 第三,没有什么比在同一个 JVM 中从内存中读取数据更快的了。

总结一下:我会 1. 考虑不使用分布式缓存(并告别配置问题)或 2. 为分布式缓存配置 Ehcache(我认为这比改变整个方法要简单)。

于 2010-05-19T04:01:03.797 回答
7

如果您想尝试路由,您甚至可以查看 Neo4j,请参阅有关使用 A* 算法的博客

于 2010-05-19T09:23:19.607 回答
1

首先,mongodb 本身不是缓存。它是一个持久数据存储,就像 mysql 是一个持久数据存储一样。

所以现在你的问题归结为“我应该使用ehcache还是redis”。使用 ehcache 后,我可以告诉您,对于具有复制/集群、缓存失效、监控和检测功能的分布式缓存来说,这是一个非常好的解决方案。

由于您的数据是只读的,因此像 hazelcast 这样的简单分布式地图也可以使用。它使用起来非常简单。

于 2010-11-17T20:23:20.987 回答