Database design 在web应用程序中跨请求共享只读数据需要哪些选项

Database design 在web应用程序中跨请求共享只读数据需要哪些选项,database-design,web,architecture,share,Database Design,Web,Architecture,Share,我们有一个web应用程序,它需要存储大约200MB的数据,这些数据将以只读方式跨用户请求访问。数据当前存储在数据库中。我们想把它放在内存中以加快读取速度。解决这个问题的最佳方法是什么? 我们是否应该使用某种将在请求之间共享的静态数据结构?我们是否应该有一个单独的过程来初始化内存中的数据并通过IPC与请求进行通信?还是我遗漏了什么?memcached能帮上忙吗? 我不知道这是否有什么不同,但该应用程序是groovy/grails和java的混合体,带有apache上的postgres后端 编辑:一

我们有一个web应用程序,它需要存储大约200MB的数据,这些数据将以只读方式跨用户请求访问。数据当前存储在数据库中。我们想把它放在内存中以加快读取速度。解决这个问题的最佳方法是什么? 我们是否应该使用某种将在请求之间共享的静态数据结构?我们是否应该有一个单独的过程来初始化内存中的数据并通过IPC与请求进行通信?还是我遗漏了什么?memcached能帮上忙吗? 我不知道这是否有什么不同,但该应用程序是groovy/grails和java的混合体,带有apache上的postgres后端


编辑:一旦加载,数据将不需要任何更新。它在web应用程序的生命周期中保持不变。

如果postgres数据库中只有200MB的数据,那么您可以有一个初始化阶段(或更新数据时的稍后同步阶段)将所有数据作为Java POJO读取到内存中。web应用程序可以使用这些POJO来处理传入的HTTP请求。不需要memcached,除非您发现无法在一台服务器的内存空间中容纳所有内容。

POJO如何在请求之间共享?我假设您使用Servlet处理所有HTTP请求。然后使用ServletContext放置任何Map、ArrayList或专用缓存对象,这些对象将保存所有Java POJO类。这可以允许其他servlet从servlet上下文获取缓存对象。检查第二个答案,使用更高级的EHCache。同一上下文中的另一个问题。。。如果缓存增长到2GB以上,或者说是只读的,不更新,或者使用memcached之类的东西,那么这仍然是一个好的解决方案吗?如果大小超过单机JVM允许的最大内存,那么值得考虑EHCache之类的选项,Memcached允许缓存跨越多台机器的内存。Servlet的编程模型应该几乎相同,但是缓存的后端实现和与缓存管理器的操作接口是不同的。在我前面提到的文章中,它提供了在Servlet代码中与EHCache管理器交互的示例代码。