Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 使用APPENGINE JDO的网站点击计数器_Google App Engine_Jdo - Fatal编程技术网

Google app engine 使用APPENGINE JDO的网站点击计数器

Google app engine 使用APPENGINE JDO的网站点击计数器,google-app-engine,jdo,Google App Engine,Jdo,请帮帮我 如何使用APPENGINE java JDO实现网站点击计数器…(多个用户一次点击) 我尝试了一个带有count变量的简单jdo类 和increment函数来增加计数器,但在多用户的情况下,计数没有按预期工作。写入更新的计数值相当慢,因此您可能会遇到竞争条件和最终的一致性问题。根据您的软件,数据存储每秒执行的写入可能不会超过一次 要添加的第一件事是扩展并发计数容量 第二件事是将计数器更新代码移动到中,以便网页响应代码不会被命中计数器代码延迟。这不是一项简单的任务。当您想要更改GAE中的

请帮帮我

如何使用APPENGINE java JDO实现网站点击计数器…(多个用户一次点击)

我尝试了一个带有count变量的简单jdo类


和increment函数来增加计数器,但在多用户的情况下,计数没有按预期工作。

写入更新的计数值相当慢,因此您可能会遇到竞争条件和最终的一致性问题。根据您的软件,数据存储每秒执行的写入可能不会超过一次

要添加的第一件事是扩展并发计数容量


第二件事是将计数器更新代码移动到中,以便网页响应代码不会被命中计数器代码延迟。

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

  • 数据存储将每个实体(实际上是实体组)的更新速率限制为大约1次更新/秒。您需要将计数器分割为多个实体:请参阅

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

  • 事务性示例:

    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();
    }
    

    当您使用碎片时,拥有事务有什么意义。事务将再次限制应用程序的可扩展性。使用碎片的唯一原因是为了避免事务。