从Memcache或blobstore提供服务更快/更高效/更便宜吗?

时间:2012-02-10 23:36:34

标签: java google-app-engine memcached blobstore

我有文件数据(特别是语言资源文件)。这些文件是使用机器翻译api(goog translate)自动生成的。它们相对不频繁地更改,但是当主设备更改(添加或更改新字符串)时,这会导致所有其他语言文件自动更新。

我正在尝试直接从blobstore提供这些文件或从memcache提供这些文件并将它们存储在数据存储区中。

哪个更快/更有效?

3 个答案:

答案 0 :(得分:5)

尼克约翰逊描述了this article中的速度权衡。 blobstore最擅长处理来自用户的上传。对于您的问题,您可能会使用数据存储区支持的内存缓存获得最快和最便宜的性能。在python中,NDB将为您自动执行此操作。在java中,使用objectify

答案 1 :(得分:1)

这实际上取决于你的服务。当人们谈论blobstore时,他们通常谈论不适合memcache的大数据(媒体文件)。我们的应用程序提供了大量的音频文件,我发现blobstore特别适合这个,因为它支持progressive-http下载。

在这两种情况下,查找时间几乎是瞬时的(它们都只是地图,您可以通过键查找数据)。服务它所需的时间取决于要返回的项目。我想不出有什么理由为什么我会从blobstore中取出一些东西并把它放在memcache中。它真的不会随时节省。

现在数据存储区是一个不同的野兽......

答案 2 :(得分:-2)

每个“更快”问题的答案是“基准测试”。您的设置的特殊性(磁盘速度,内存访问延迟,带宽,恶魔攻击)最多可以对性能变化做出任何一般性回答。您在Google App Engine中运行这一事实只会让您更加努力 - 您不会知道您将获得哪些硬件!所以测试它。

也就是说,Google提供的本地(ish)内存缓存可能会比任何可能涉及到磁盘的内存更快。内存访问延迟比磁盘访问延迟快一个数量级,内存带宽是目前市场上最快的SSD的百倍或更多。

因此,如果您能够负担得起RAM,并希望最大限度地提高响应速度,那么将数据存储在内存中通常会更有效。