2012-02-10 70 views
3

我有文件数据(特别是语言资源文件)。这些文件是使用机器翻译API(goog translate)自动生成的。它们的变化相对较少,但当主变更时(新字符串添加或更改)时,会导致所有其他语言文件自动更新。从Memcache或Blobstore服务是否更快/更高效/更便宜?

我试图决定在直接从blobstore提供这些文件还是从memcache提供这些文件并将它们存储在数据存储中。

哪个更快/更高效?

+0

我相信memcache仍然是免费的-99。 – Dave 2012-02-11 00:06:31

+0

你打算如何更新blobstore中的数据?我认为我们可以创建或附加blob,但不能更新blob的内容。 – 2012-02-11 00:48:12

+0

@IbrahimArief我只是创建一个新的blob实体并删除旧的实体。 – aloo 2012-02-11 06:11:33

回答

-2

每个“哪个更快”的问题的答案是“基准测试”。您的设置(磁盘速度,内存访问延迟,带宽,恶魔侵扰)的特殊性使得关于性能变化的一般回答充其量只是一个例子。您在Google App Engine中运行的事实只会让这变得更加困难 - 您不知道知道您将获得哪些硬件!所以测试一下。

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

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

+4

这在几个层面上有误导性。 Google的memcache实现不会将数据存储在应用实例的RAM中,而是存储在属于Google基础架构一部分的单独服务器中。访问memcache几乎没有成本,所以你几乎可以肯定可以使用它,但没有保证持久性。缓存实例内存中的数据是可能的,但效果有限,因为我们对实例的生命周期和可寻址性的控制很少。部分建议可能适合正常的集群环境,但GAE是另一种不同的野兽。 – 2012-02-11 00:19:02

+0

@IbrahimArief为什么我指定了一个“本地”内存缓存 - 谷歌对本地化没有任何保证,但即使是在远程机器内存上的TCP-over-Infiniband也比打到硬盘更快。关于持久性,我知道没有memcache存在重新启动。这里隐含的假设是在一些较慢的持久性存储中存在数据的副本。 – Borealid 2012-02-11 02:02:20

5

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

+0

NDB目前不是NDB的唯一API吗?您可以使用Objectify在Java中实现相同类型的自动化(put-get到由数据存储自动支持的memcache):http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Global_Cache – 2012-02-11 00:26:39

+0

谢谢。更新。 – mjibson 2012-02-11 00:39:10

+0

@mjibson感谢您的链接。它验证memcache比提供本地资源文件更快,但不会与blobstore进行比较。虽然我仍然怀疑本地文件甚至blobstore文件是否也缓存在某种Google CDN中。 – aloo 2012-02-11 06:27:01

1

这真的取决于你所服务的。当人们谈论blobstore时,他们通常是,他们谈论不适合memcache的大数据(媒体文件)。我们的应用程序提供了很多音频文件,我发现blobstore对此特别有用,因为它支持渐进式http下载。

在这两种情况下,查找时间实际上都是瞬时的(它们都只是地图,并且通过一个关键字查找数据)。所需时间取决于所返回的物品。我想不出为什么我会从blobstore中取出某些东西并将其放入memcache中。这真的不会节省任何时间。

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

+1

我刚才意识到你确实指定这是文件数据。我建议将它们放在数据存储中,并使用memcache来为它们提供服务。 Objectify在这里真的会成为你的朋友。 – 2012-02-11 19:20:31

+0

是的这些都是普通的旧文本文件,大小为〜10kb ...是的,我们使用物化很沉重:) – aloo 2012-02-11 20:21:06

+0

如果你通过http向外部服务它们,你也可以通过添加适当的头文件将它们缓存在上游到响应。这显着降低了我们的成本。 – 2012-02-11 22:50:08

相关问题