我已经浏览了谷歌应用引擎文档,掌握他们在那里谈论的事情并不是很容易。我已经开始编写新的应用程序,并且已经遵循高复制数据存储示例。在组中保存多个实体,并能够查询它们并在我的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!!!!");
}
答案 0 :(得分:2)
不要使用计数器设置自己的ID。如果您没有提供实体,AppEngine的数据存储区将在您的实体首次插入时自动为其分配ID。使用计数器的问题在于,这是每个刀片必须接触的中心点;并且App Engine不适用于扩展到同一实体组的高频写入(不同的实体组没有问题)。实际上,他们建议每个实体组平均每秒写入不超过一次。
简而言之,固定的计数器会扼杀你的表现。除非您有其他紧迫的原因,否则请使用应用引擎的默认ID分配系统。请注意,应用引擎的ID不是顺序的,正是因为顺序ID不能缩放。