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

标签 java google-app-engine google-cloud-datastore

我已经浏览了谷歌应用程序引擎文档,要掌握他们在那里谈论的内容确实不是很容易。我已经开始编写一个新应用程序,并且已经遵循了高复制数据存储示例。将多个实体保存在一个组中,并能够查询它们并将它们显示在我的 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!!!!");
    }

最佳答案

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

简而言之,固定的计数器会降低你的性能。除非您有紧急原因,否则请使用 App Engine 的默认 ID 分配系统。请注意,应用引擎的 ID 不是连续的,这正是连续 ID 无法缩放的原因。

关于java - App Engine 数据存储 - 如何使用 Java 简单地存储和更新单个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6488257/

相关文章:

java - JUnit 测试中的注释数量不正确

java - Hadoop的Reducer运行在哪台机器上

python - GAE 需要模型属性当且仅当另一个属性具有一定值吗?

python - 我的 Google App Engine 代码中的内存泄漏

java - Php在Java中的gzcompress

java - 如何删除在GUI中绘制的线条?

javascript - Python 中的 Pubnub 存在功能 (GAE)

java - 500 在线 Web 应用程序错误,但本地版本没有错误

使用 Google 云端点 : Datastore vs SQL 的 Android 应用

java - com.google.cloud.datastore.Datastore 线程安全吗?