2010-03-10 23 views
6

当您执行日志记录语句时,Google在哪里存储日志?记录语句似乎非常快,所以它看起来并不像它们存储在数据存储中。Google App Engine日志的工作原理如何?

日志有多可靠?如果我做了一个日志语句并且成功了,它几乎可以保证它会出现在日志中?

存储了多少日志历史记录?

我很感兴趣,这样做的原因是因为我正在做一个问答网站,我想每个唯一登录的用户跟踪的意见,每一个问题,并显示观看次数的问题页。因此,如果10个不同的用户访问问题页面100次,它仍然只计为10个独特的视图。

我有一个非现场计算机,为我的应用程序做后台处理。我打算让这台非现场计算机每隔30分钟下载一次日志,并根据日志计算每个问题的查看次数。通过这样做,我不必为每个用户查看的每个不同问题创建一个数据存储实体。

你们认为什么?有没有人看到这个问题?

编辑:我想我的主要关注的是日志的可靠性。

回答

5

这不是一个回答您的问题 - 更确切地说,这是你正在试图解决这个问题的回应。

如果您熟悉Bloom Filters并使用Memcached's incr(或sharded datastore counter),您可以创建一个“足够好”的解决方案。您可以使用布隆过滤器来测试一个值是否在集合中(在这种情况下是用户标识),如果不是,则增加计数器并将该值添加到过滤器中。布卢姆过滤器的其中一个属性是将一个值添加到包含检查的集合是一个常量时间操作。在空间方面,它需要一点空间来存储每个潜在的过滤器,但这似乎比编写代码来定期grep独特的代码要复杂得多。 Here's a Python implementation

没有什么是免费的,但是 - 我说的“足够好”是很重要的。使用布隆过滤器,总会有一个误报的可能性。也就是说,根据每个问题的散列大小,如果用户第一次查看问题时,您很可能会检查是否已经计算了用户ID并获得了“YES IT HAS” 。您可以计算出合理的误报所需的大小,但这样做会有一定的空间折中。

+0

感谢Ikai,我考虑使用memcache并询问这个问题:http://stackoverflow.com/questions/2422131/google-app-engine-memcache-how-likely-am-i-to-lose-数据在这种情况下。我收到的所有回复都表示,我不应该依赖memcache来存储临时数据,我只能真正将它用作缓存。我实际上想出了一个非常好的解决方案来使用请求日志来找出我需要的数据:)。 – Kyle 2010-03-16 02:26:04

+0

另外我尝试使用数据存储(http://stackoverflow.com/questions/2427442/google-app-engine-about-how-much-quota-does-a-single-datastore-put-use),并计算它太昂贵了,尤其是考虑到我需要的数据已经存储在请求日志中。 – Kyle 2010-03-16 02:34:31

相关问题