Google app engine 使用objectify将所有实体成功存储在数据存储中,向客户机提供响应的最佳方式是什么
我在数据存储上存储了多个相同类型的实体,只需从客户端点击一次。 以下是模型类:Google app engine 使用objectify将所有实体成功存储在数据存储中,向客户机提供响应的最佳方式是什么,google-app-engine,google-cloud-datastore,objectify,Google App Engine,Google Cloud Datastore,Objectify,我在数据存储上存储了多个相同类型的实体,只需从客户端点击一次。 以下是模型类: @Entity public class Student { @Id Long id; @Index String status; String time; @Ignore String log; @Ignore List<Student> StudentList
@Entity
public class Student {
@Id
Long id;
@Index
String status;
String time;
@Ignore
String log;
@Ignore
List<Student> StudentList;
}
我必须根据客户的单个请求存储数千名学生。为此,我有一张excel表格,里面有50000多名学生。在客户端,我阅读excel表格并请求将所有学生存储在数据存储中。到目前为止,我成功地从excel表格中存储了25名学生,该表格只有25名学生
问题:
1) 在客户端的一次点击中存储大量同类实体是否正确
2) 从读写操作的角度来看,如何在后端实现这一目标
3) 我如何向客户机响应所有实体是否成功存储在数据存储中?目前我正在返回存储的实体,如ofy().load().entities(studentList)代码>,,
但是我不想给出存储的实体作为响应,因为有大量的实体 1-据我所知,这是存储大量同类实体的正确方法。也许还有其他更好的方法。如果有人找到更好的方法,请告诉我
2-在插入期间,写入操作取决于索引,存储到数据存储。由于有一个索引字段,因此将有两个写入操作用于存储单个实体。1用于索引,1用于将该实体存储在数据存储上
3-客户端:我做了与我在评论中提到的相同的事情,首先从excel表格中读取所有学生数据,每个学生也有卷号。从excel中读取数据时,列出卷号。将列表转换为特定顺序,例如升序或降序。将卷号连接起来,形成一个较长的单字符串。使用任何哈希算法计算该字符串的哈希值,并将该哈希值与学生数据一起以查询参数(或路径参数或其他方式)发送到服务器
服务器端:插入学生数据,使用y()加载()实体(studenList)加载插入的实体代码>
从加载的学生实体中形成卷号列表。将列表转换为与客户端相同的顺序,即升序或降序。
将卷号连接起来,形成一个较长的单字符串。使用相同的哈希算法计算该字符串的哈希。
现在将此散列与查询参数中来自客户端的散列进行比较。如果两个哈希值相等,则来自客户端的所有学生数据都已成功存储在数据存储中。
您还可以将此服务器端哈希发送到客户端,以便客户端也可以进行验证。我的方法是,您可以使用保存操作的结果,如下所示:
Map<Key<Student>, Student> = ofy().save().entities(student.getStudentList()).now();
Map=ofy().save().entities(student.getStudentList()).now();
您可以遍历并获取地图中的所有关键点。然后,您可以通过API调用从列表中的键返回所有生成的ID。此外,如果发生错误,objectify会引发运行时异常。您得到答案了吗?还没有。但我有一些想法,比如在客户端计算数据的校验和(客户端校验和),然后在向服务器发出请求时将校验和发送到服务器,然后我将再次计算插入数据的校验和(服务器校验和),并将两者匹配。若两个校验和相等,则表示来自客户端的所有实体都已成功存储在数据存储中。在计算客户端和服务器端的校验和之前,可能需要对数据进行排序。这只是我想的一种方式,在成功实施后将发布答案。
Map<Key<Student>, Student> = ofy().save().entities(student.getStudentList()).now();