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