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
应用程序引擎数据存储-如何使用Java简单地存储和更新单个值?_Java_Google App Engine_Google Cloud Datastore - Fatal编程技术网

应用程序引擎数据存储-如何使用Java简单地存储和更新单个值?

应用程序引擎数据存储-如何使用Java简单地存储和更新单个值?,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,我已经阅读了谷歌应用程序引擎文档,很难理解他们在那里谈论的东西。我已经开始编写一个新的应用程序,并且已经遵循了一个高复制数据存储示例。在一个组中保存多个实体,并且能够查询它们并在我的jsp网页上显示它们。我的问题是如何保存单个值,然后在需要时更新它。基本上,我需要保存到目前为止我给出的最大ID。然后,当我需要向组中添加一个新实体时,我只需要读取这个最大ID值,并将其递增1,然后将递增的值保存回去。最后,我需要将递增的值作为其ID分配给我的新实体 我需要提到的是,我正在使用Javaservlet和

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

我需要提到的是,我正在使用Javaservlet和JSP进行编码。因此,Python代码对我来说没有用处。我现有的代码如下。行“long ID=getNewID();”应该给我这个递增的值,并将递增的值放回数据存储。如果您能帮助我编写getNewID()方法,我将不胜感激


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


简言之,一个固定的计数器将扼杀您的性能。使用app engine的默认ID分配系统,除非您另有原因。请注意,app engine的ID不是连续的,原因正是连续ID不能扩展。

您能给我指一个文档或简单的示例代码(code.google.com页面除外)吗?我将在另一个实体组中使用此ID。在原始实体组中,我将获得有关医生的信息。在第二个实体组中,我将进行医生执行的手术。因此,第二个实体组中的ID将指向第一个实体组中的医生。这有点像是将其作为数据存储中的关系数据库。这是一个好的设计吗?@newwebdev,你不应该有一组有限的、固定的实体组;这将再次扼杀性能。创建实体组是一项非常廉价的操作。例如,您可以让每个医生都是实体组的根,并且让医生执行的所有操作都在同一实体组中。然后,您可以在该实体组中拥有一个顺序计数器。所以,比如说,你可以为X医生做手术。但是,为所有医生提供一个单一的全局计数器是个坏主意。而且,在几乎所有情况下,首先使用顺序计数器的意义仍然很小。只需让App Engine为您分配ID即可。
    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!!!!");
    }