gpt4 book ai didi

java - App Engine Datastore - 将属性增量增加 2

转载 作者:行者123 更新时间:2023-11-29 03:53:21 24 4
gpt4 key购买 nike

我正在尝试构建一个简单的 App Engine 数据存储区实体,该实体基本上记录它被查看的次数。我在 JSP 文件中设置了代码,它确实会增加变量,但每次它似乎增加 2 而不是 1。这是有问题的代码。

    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Entity story = datastore.get(KeyFactory.stringToKey(request.getParameter("story_key")));
String json_out = "";

int num_views = 0;
if(story.getProperty("views") != null) {
num_views = Integer.parseInt(story.getProperty("views").toString());
}
//Update the donated status of this object.
story.setProperty("views", num_views + 1);
datastore.put(story);

json_out += "{";
json_out += "\"title\":\"" + story.getProperty("title") + "\", ";
json_out += "\"views\":\"" + num_views + "\"";
json_out += "}";

out.println(json_out);

知道为什么它会递增 2 吗?当我获得观看次数时,我什至尝试减去一个,但随后该数字始终如您所愿地保持不变。真的很奇怪。

最佳答案

如果您正在使用数据存储实现计数器,您应该采用允许高吞吐量的技术。您上面的解决方案可以很容易地每秒多次写入数据存储,这违反了 HRD 策略。此外,它不是线程安全的(不在事务中运行,因此更新可能会乱序应用,并且您的结果不是您所期望的)。试用分片计数器,它解决了这些问题:

http://code.google.com/appengine/articles/sharding_counters.html

关于java - App Engine Datastore - 将属性增量增加 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7720412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com