我已经阅读了很多关于计数器的GAE文章和GAE中令人讨厌的写入限制.我已经看到了带有分片,cron任务,内存缓存等的解决方案.然后我学到了足够的java线程能够提出问题:
问:我们可以使用并发/ servlet静态varibales在servlet线程中实现计数器吗?
这将带来额外的好处,即减少对数据存储区和内存缓存的写入(花费相同的$),并删除cron要求,因为一系列快速计数器命中中的最后一个servlet将更新数据存储区.
我不太了解并发编程以提出解决方案,但我想象一下静态servlet变量,可能是"atomic-integers"和last-update标志,以便检查这个servlet是否是最后一个更新servlet的servlet static var,在最后200ms内,从而触发对数据存储区的保存.
// Servlet gets a hit
// static var counter++
// Checks last datastore save time of the static var, if longer than 200ms
// save to datastore & save "last update time"
// If shorter than 200 ms ago, let the next servlet call update the datastore
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?有什么建议?Mucho赞赏你的想法.
java concurrency google-app-engine multithreading thread-safety