我正在设计一个应用程序,它必须使用来自多个来源的实时数据,并定期报告这些数据。使用的数据将被添加到Ehcache缓存中,报告将对其进行查询。一旦使用了实时数据,则只需将其持久化以用于恢复。如果应用程序重新启动,它将在连接到实时数据源(对新数据进行排队)之前用数据库中的历史数据填充缓存。
我倾向于将其实现为具有JDBC缓存的cache- as -sor:
接收数据
其中2-4封装在JTA事务中。
我还研究了Hibernate和Ehcache作为二级缓存,但这似乎并不合适。
我是Ehcache的新手,所以我想要一些关于正确设计的建议。
发布于 2012-02-21 05:50:01
为了持久化,而不是进行" cache -aside",您可能希望将缓存配置为使用直读和某些缓存写入器(直写或后写)。您可以在这里阅读到这些内容:http://ehcache.org/documentation/user-guide/concepts#cache-as-sor现在我会避免使用JTA,因为我担心开销可能过大(除非您确实需要XA事务恢复),而是选择容错方法。如果你选择异步持久化(write- be ),使用Terracotta集群你的缓存( WriteBehind队列将自动是持久化的、可恢复的,如果多个节点可用,甚至是HA )是确保每个元素被写到底层SoR的一种方法……这一切都取决于你的需求,我猜。
Ehcache允许您从单节点、非集群方法开始,只需使用直读和直写缓存,您可以扩展和微调以满足您的SLA。随着数据的增长,您可以转移到集群缓存和异步写入器(如果写入成为问题)或增加缓存大小(如果读取仍然是问题)。显然,你应该衡量(或者至少知道你预见到的瓶颈是什么),并做出相应的选择。但是,在RDBMS前面放置缓存是一种常见且易于理解的模式,可以扩展对这些“较慢”存储的读(和写)访问……
发布于 2012-02-18 06:27:59
如果你想把数据放在缓存中,Hibernate看起来有点过头了。您所需要的就是JDBC,它可以实现缓存初始化的缓存加载器,也可以定期将数据保存到数据库。或者只是将缓存设置为持久存储在磁盘上。
发布于 2012-02-18 06:31:17
那么Ehcache + Hibernate不是解决方案。您在这里描述的是一个异步事件处理系统,其中一个侦听器等待“成功处理的事件”进行持久化。
在这种情况下,NoSQL数据库是更好的选择,除非您需要严格依赖于关系数据库。
https://stackoverflow.com/questions/9335286
复制相似问题