【问题标题】:website hit counter using APPENGINE JDO使用 APPENGINE JDO 的网站点击计数器
【发布时间】:2014-03-25 18:16:49
【问题描述】:

请帮帮我..

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

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

和递增函数来增加计数器,但在多个用户的情况下,计数不能按预期工作。

【问题讨论】:

    标签: google-app-engine jdo


    【解决方案1】:

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

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

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

    事务示例:

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

    【讨论】:

    • 在使用分片时进行事务有什么意义。事务将再次限制您的应用程序的可扩展性。使用分片的唯一原因是避免交易。
    【解决方案2】:

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

    首先要添加 Sharding Counter 以扩大您的并发计数容量。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-12
      • 2018-07-16
      • 1970-01-01
      • 2017-04-11
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      相关资源
      最近更新 更多