请帮助我..
如何实施网站点击使用APPENGINE java JDO ...(多个用户一次点击)
我尝试了一个带有count varible
的简单jdo类并增加函数以增加计数器,但在多个用户的情况下,计数未按预期工作。
答案 0 :(得分:1)
这不是一项微不足道的任务。当您想要在GAE中更改共享数据(计数器)时,有两个因素在起作用:
数据存储将每个实体(实际实体组)的更新速率限制为大约1更新/秒。您需要将计数器划分(分片)为多个实体:请参阅sharding counters。
您需要以事务方式更改计数器以确保它不会被并行请求覆盖。
交易示例:
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
// here you should load the counter entity, increase it and then save it
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
答案 1 :(得分:0)
写入更新的计数值相当慢,因此您可能会遇到竞争条件和最终的一致性问题。根据您的软件,数据存储可能无法执行超过每秒一次的写入。
要添加的第一件事是Sharding Counter以扩大并发计数容量。
第二件事是将计数器更新代码移动到Push Queue,以便网页响应代码不会被命中计数器代码延迟。