网站使用APPENGINE JDO点击计数器

时间:2014-03-25 18:16:49

标签: google-app-engine jdo

请帮助我..

如何实施网站点击使用APPENGINE java JDO ...(多个用户一次点击)

我尝试了一个带有count varible

的简单jdo类

并增加函数以增加计数器,但在多个用户的情况下,计数未按预期工作。

2 个答案:

答案 0 :(得分:1)

这不是一项微不足道的任务。当您想要在GAE中更改共享数据(计数器)时,有两个因素在起作用:

  1. 数据存储将每个实体(实际实体组)的更新速率限制为大约1更新/秒。您需要将计数器划分(分片)为多个实体:请参阅sharding counters

  2. 您需要以事务方式更改计数器以确保它不会被并行请求覆盖。

  3. 交易示例:

    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,以便网页响应代码不会被命中计数器代码延迟。