Mongodb 什么';是否有一个合适的存储RDBMS,NoSQL,用于缓存网站响应?

Mongodb 什么';是否有一个合适的存储RDBMS,NoSQL,用于缓存网站响应?,mongodb,caching,memcached,nosql,Mongodb,Caching,Memcached,Nosql,我们正在构建一个基于Java的内部RESTfulWeb服务应用程序,该应用程序以XML格式公开特定于域的数据。我们希望通过利用缓存存储来补充该体系结构并提高性能。我们希望将缓存托管在单独但并置的服务器上,并且由于web服务是Java/Grails,因此缓存的Java或HTTP API将是理想的 当请求传入时,唯一URI及其响应将使用简单的键/值约定进行缓存,例如 KEY VALUE http://prod1/f

我们正在构建一个基于Java的内部RESTfulWeb服务应用程序,该应用程序以XML格式公开特定于域的数据。我们希望通过利用缓存存储来补充该体系结构并提高性能。我们希望将缓存托管在单独但并置的服务器上,并且由于web服务是Java/Grails,因此缓存的Java或HTTP API将是理想的

当请求传入时,唯一URI及其响应将使用简单的键/值约定进行缓存,例如

KEY                                            VALUE
http://prod1/financials/reports/JAN/2007   --> XML response of 50Mb
http://prod1/legal/sow/9004                --> XML response of 250Kb
单个请求的响应值可能非常大,可能高达200Mb,但可能小到1Kb。而且每天的请求数量很少;不超过1000,但平均250;我们没有大量的消费者;同样,这是一个内部应用程序

我们开始将MongoDB视为一个潜在的缓存存储,但考虑到MongoDB的最大文档大小为8或16Mb,我们认为它不是最合适的


基于我提供的有限细节,对其他类型的商店有什么建议适合这种情况吗

我理解你的问题的方式是,你基本上想要缓存文件,也就是说,你不需要理解文件的内容,对吗

在这种情况下,可以使用MongoDB将xml缓存为文件。通过这种方式,您可以顺利地将文件流入和流出数据库。您可以使用URI作为“文件名”,这应该可以完成这项工作


没有(合理的)文件大小限制,大多数(如果不是全部的话)驱动程序都支持它。

Twitter的工程团队刚刚在博客上介绍了他们的SpiderDuck项目,该项目与您描述的类似。他们使用Cassandra和Scribe+HDFS作为后端


这里最简单的解决方案就是将这些数据块缓存到文件系统中。如果希望缓存的大小大于现有内存,可以使用tmpfs确保所有内容都在主内存或任何普通文件系统中。不要担心,即使在后一种情况下,操作系统内核也会高效地缓存主内存中经常使用的所有内容。如果使用Linux,仍然必须通过cron删除旧文件


这似乎是一个老派的解决方案,但它可能比其他许多解决方案更容易实现,也不容易出错。

50MB响应?分页是一种选择吗?在我看来,这个场景有一种代码味道。不是真的,这是一个系统到系统的交互,不是用户到系统的交互。是的,没错,响应是任意的。我不知道GridFS…那么那些比磁盘更能利用内存的缓存存储呢?我们应该看看Memcached吗?MongoDB是以内存为中心的,并且尽可能多地保存在内存中。总的来说,我认为缓存数百兆字节的文件是一个相当不寻常的要求,我相信MongoDB可以完成这项工作。可能还有其他选项,可能包括memcached,但我对任何选项都不熟悉。我只是好奇GridFS是否会像非GridFS一样使用RAM……而且要明确的是,文件缓存并不是我们在缓存物理文件,100MB+的响应可能来自多个数据源的聚合,加入这么多的数据需要时间,因此缓存结果对于后续请求来说当然是有意义的,因为它避免了聚合步骤。GridFS是在MongoDB集合之上实现的,非常简单。我知道您正在缓存计算的输出;顺便说一句,物理文件也可以用于缓存(但我不认为这样做的理由)看起来有些过分,但看起来很有趣