在性能和方便性方面,使用java中的自定义对象或Map来存储/检索firestore中的文档哪个更好。使用自定义对象是否会导致性能问题?
// HashMap
Map<String, Object> sampleMap = new HashMap<>();
sampleMap.put("name","sample1");
sampleMap.put("age", 26);
// Custom Class
class Sample {
String name;
int age;
public Sample(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
// Custom Object
Sample sample = new Sample("sample1", 26);
FirestoreOptions firestoreOptions =
FirestoreOptions.getDefaultInstance().toBuilder().setProjectId("project-id")
.setCredentials(GoogleCredentials.getApplicationDefault()).build();
Firestore db = firestoreOptions.getService();
// using Custom Object
db.collection("SampleData").document().set(sample);
// using HashMap
db.collection("SampleData").document().set(sampleMap);
对于每秒100次读取/100次写入的应用程序,哪个更好?
拥有一个定制类是否证明了性能成本(如果有的话)的合理性?
2条答案
按热度按时间ekqde3dh1#
当您将一个pojo类型的对象传递给firestore时,性能会受到很大的影响,尤其是第一次使用该类时。这是因为firestoresdk必须使用jvm反射将对象序列化或反序列化到文档中。反射通常是相当慢的,尽管它可能足够快。你应该肯定地知道。
如果您发送和接收Map,您将获得更好的性能。您还将编写更多的代码,但如果您做得正确,它肯定会运行得更快。这取决于你是否喜欢方便而不是性能。
另请参见:
java反射性能
为什么反射很慢?
ax6ht2ek2#
我认为,即使每秒有100次读/写操作,也不会有太多的性能开销。而且使用自定义类是绝对可行的,否则您将不得不使用snapshot.data对象,这可能会导致人为错误等