什么是适合缓存网站响应的存储RDBMS,NoSQL?

时间:2011-11-17 18:07:47

标签: mongodb caching memcached nosql

我们正在构建一个基于Java的内部RESTful Web服务应用程序,该应用程序以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,我们认为它不是最合适的。

根据我提供的有限细节,对于适合这种情况的其他类型商店的任何建议?

3 个答案:

答案 0 :(得分:1)

我理解你的问题的方式,你基本上想要缓存文件,即你不需要理解文件的内容,对吧?

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

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

答案 1 :(得分:1)

Twitter的工程团队刚刚发表了关于他们的SpiderDuck项目的博客,该项目的功能类似于您所描述的内容。他们使用Cassandra和Scribe + HDFS作为后端。

http://engineering.twitter.com/2011/11/spiderduck-twitters-real-time-url.html

答案 2 :(得分:0)

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

它看起来像是一个旧学校的解决方案,但它可能比其他许多解决方案更容易实现并且更不容易出错。