【问题标题】:Appengine can't retrieve Entities from datastoreAppengine 无法从数据存储中检索实体
【发布时间】:2013-03-29 15:42:32
【问题描述】:

我已经设置好 appengine,它可以在我的本地主机上运行,​​我调用

Entity greeting3 = new Entity(KeyFactory.createKey("World", "world3"));
greeting3.setProperty("raw", "2.2 # # # .");
datastore.put(greeting3);

添加我的实体,我可以在控制台中看到它们添加。然后我使用

Query q = new Query("World");
PreparedQuery pq = datastore.prepare(q);
for (Entity result : pq.asIterable()) {
    resp.getWriter().println(result);
}

检索实体。它在本地主机上完美运行,但在服务器上我无法接收所有添加实体的列表。尽管使用第一个代码,它们确实被添加了。我也用

e = datastore.get(KeyFactory.createKey("World", req.getParameter(k)));
resp.getWriter().println(e.getProperty("raw"));

在本地主机上它也可以工作,但在互联网上,它会抛出“未找到实体异常”。我试过手动添加数据存储索引,但没有帮助。 我整天都在工作,现在真的让我很不高兴:(我也很确定昨天它工作了...... 请帮忙 谢谢

【问题讨论】:

  • 检查req.getParameter(k)实际上是"world3"
  • 它在 loacalhost 上有 name/id world3,但在 google 上有 name=world3 "tag"。但也不应该 datastore.prepare(q);返回所有世界实体?
  • @zavr 我的回答有帮助吗?
  • @xybrek 我不这么认为,我最终创建了一个新应用

标签: java google-app-engine


【解决方案1】:

如果您在将实体放入数据存储区后很快运行查询,则此问题可能是因为应用引擎数据存储区不是“immediately consistent”。它是“eventually consistent

您可以在运行查询之前等待几秒钟(也许 10 秒钟?)来测试它。

如果这是错误,那么您应该查看docs 中的应用引擎数据存储概述

【讨论】:

  • 不幸的是,事实并非如此,因为已经添加了 10 多个小时,但仍然无法正常工作。我也可以在管理员中看到,但无法使用数据存储 API 检索。我将尝试创建新项目并在其中使用数据存储,看看会发生什么。欢呼
【解决方案2】:

我也遇到过这种情况,如果不是 req.getParameter(k) 不是您所期望的,那么您只需要再次运行查询。数据存储并不是很快,这就是为什么有 Memcache。

如果您希望您的应用程序立即提供数据,您必须使用 Memcache API “缓存”它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多