由于索引“_expires”属性引起的争用问题 - Google App Engine上的会话[Java]

时间:2017-12-30 18:12:24

标签: java google-app-engine session google-cloud-datastore google-cloud-platform

我注意到if ($user->wasRecentlyCreated) { // new user } else { // user already exists } 的{​​{1}}属性已编入索引。查询过期的会话时,这肯定会很方便。但这似乎有一个缺点。 _expires属性包含单调递增的值。这意味着此属性的索引记录很可能最终出现在单个平板电脑服务器上。我担心这种平板电脑服务器很容易被经常更新会话数据的应用程序重载。有没有办法告诉App Engine不要索引_ah_SESSION属性?也许就像向_expires添加规则一样,例如:

_expires

据我所知,回答我的问题是“不”。我正在考虑提交功能请求。但也许我错过了一些东西。非常感谢您的意见。

更新1:我已为此提交了功能请求。请考虑通过“主演”给它投票:https://issuetracker.google.com/issues/71583968

更新2 :Google已注意到该功能请求,并且“目前正在调查解决方案”。在问题跟踪器讨论中,有一篇帖子说可能可以阻止appengine-web.xml属性通过<session-index-expiration>false</session-index-expiration> 配置文件编制索引。但是,由于此文件似乎只处理声明自定义索引,我无法看到如何使用它来禁用单个属性索引。有什么想法吗?

PS:我最初认为,在每次请求仅更新到期时间戳之后,_expires个实体会被自动重写,这有点普遍存在。但是这是错误的。根据实际implementation of SessionManager,仅当会话至少25%到期时才会强制执行此类重写。这显着降低了索引datastore-indexes.xml属性导致争用的风险。至少对于主要使用会话来跟踪登录/注销用户的应用程序。

0 个答案:

没有答案