Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 以经济高效的方式跟踪图像视图_Google App Engine_Banner Ads - Fatal编程技术网

Google app engine 以经济高效的方式跟踪图像视图

Google app engine 以经济高效的方式跟踪图像视图,google-app-engine,banner-ads,Google App Engine,Banner Ads,我正在寻找一个解决方案,在我的一个GAE应用程序上实现赞助图片 我们有大约5000名用户在使用该应用程序,每次浏览和有人点击这些赞助图片时,都需要对其进行跟踪 有人建议为计数器设置多个条目,然后随机增加这些计数器以通过数据存储写入限制,但是如果您恰好同时有两个视图,并且两个视图都试图同时写入数据存储,则第二次写入将覆盖第一次写入,这意味着您将丢失一个视图 目前,我们正在为每个视图和每次单击创建一个新的数据存储条目,并让调度程序将其传递到一个队列,该队列将所有视图和单击相加,并将计数保存在一个统计

我正在寻找一个解决方案,在我的一个GAE应用程序上实现赞助图片

我们有大约5000名用户在使用该应用程序,每次浏览和有人点击这些赞助图片时,都需要对其进行跟踪

有人建议为计数器设置多个条目,然后随机增加这些计数器以通过数据存储写入限制,但是如果您恰好同时有两个视图,并且两个视图都试图同时写入数据存储,则第二次写入将覆盖第一次写入,这意味着您将丢失一个视图


目前,我们正在为每个视图和每次单击创建一个新的数据存储条目,并让调度程序将其传递到一个队列,该队列将所有视图和单击相加,并将计数保存在一个统计实体中—效率不高。

将此作为一个答案发布:)


您可以使用吞吐量为一次一个任务的队列,并将计数操作发送到该队列。这样您就知道每次计数器上只执行一次计数操作。

为什么不使用建议使用的分布式计数器?您可以将其分配到20行计数器,这意味着您必须每秒达到20次点击(很多次),以使其高度不真实。Letleet说,为了论证,我们远远低于每秒20次点击。如果只有一个实例在运行,它应该可以工作,但是一旦有两个实例在运行,您就有1/20的机会有两个实例将尝试写入同一个条目(因此,由于两个实例同时递增同一条目而丢失该轨迹),并且更多的实例也会如此。是否有某种“行级锁定”可以让我在牺牲准确性的情况下获得通行证?分布式计数器+实体锁定将是完美的解决方案。我不是概率专家,但我相信尝试在20个计数器行中命中同一个计数器行的两个实例加起来的概率为1/400。至于你关于锁定的问题,我不知道有这样的机制(尽管这样会很好)。想想看——你可以使用一个队列,一次一个任务的吞吐量(不记得确切的术语)。这样,您就知道每次只需执行一个操作,这是一个非常酷的想法,让每个视图都被抛出到一个队列中,将每秒处理的任务数限制在一个小于写入速率的速率,并将每个队列链接到一个分布式计数器,这样您就可以获得准确的计数。我很高兴接受这个答案。