首页 文章

App Engine数据存储 - 如何使用Java简单地存储和更新单个值?

提问于
浏览
0

我已经浏览了谷歌应用程序引擎文档,掌握他们在那里谈论的事情真的不是很容易 . 我已经开始编写新的应用程序,并且已经遵循高复制数据存储示例 . 在组中保存多个实体,并能够查询它们并在我的jsp网页上显示它们 . 我的问题是如何保存单个值,然后在需要时更新它 . 基本上,我需要保存到目前为止我给出的最大ID . 然后,当我需要向组添加新实体时,我只需要读取这个单个最大ID值,并将其递增1,然后将增加的值保存回来 . 最后,我需要将增加的值分配给我的新实体作为其ID .

我需要提一下,我正在编写Java servlet和JSP . 所以,Python代码对我没用 . 我现有的代码如下 . 行“long ID = getNewID();”应该给我这个递增的值,并将递增的值放回数据存储区 . 我很感激编写getNewID()方法的任何帮助 .

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

    Key doctorTableKey = KeyFactory.createKey("doctorTable", "doctorTableName");
    Entity doctor = new Entity("doctorEntity", doctorTableKey);

    long ID = getNewID();
    String ID = getNewID(datastore, doctor);
    if(ID != -1){
        String name = req.getParameter("name");
        String lastname = req.getParameter("lastname");

        doktor.setProperty("ID", ID);
        doktor.setProperty("name", name);
        doktor.setProperty("lastname", lastname);
        doktor.setProperty("city", req.getParameter("city"));

        datastore.put(doctor);
        resp.sendRedirect("/doctorAdd.jsp?name=" + name + " " + lastname);
    }else{
        resp.sendRedirect("/doctorAdd.jsp?name=ERROR!!!!");
    }

1 回答

  • 2

    不要使用计数器设置自己的ID . 如果您没有提供实体,AppEngine的数据存储区将在您的实体首次插入时自动为其分配ID . 使用计数器的问题在于,这是每个刀片必须接触的中心点;并且App Engine不适用于扩展到同一实体组的高频写入(不同的实体组没有问题) . 实际上,他们建议每个实体组平均每秒写入不超过一次 .

    简而言之,固定的计数器会扼杀你的表现 . 除非您有其他紧迫的原因,否则请使用应用引擎的默认ID分配系统 . 请注意,app引擎的ID不是顺序的,正是因为顺序ID不能缩放 .

相关问题