在CloudFireStore中使用自定义对象是否会导致性能问题?

kx5bkwkv  于 2021-07-04  发布在  Java
关注(0)|答案(2)|浏览(278)

在性能和方便性方面,使用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次写入的应用程序,哪个更好?
拥有一个定制类是否证明了性能成本(如果有的话)的合理性?

ekqde3dh

ekqde3dh1#

当您将一个pojo类型的对象传递给firestore时,性能会受到很大的影响,尤其是第一次使用该类时。这是因为firestoresdk必须使用jvm反射将对象序列化或反序列化到文档中。反射通常是相当慢的,尽管它可能足够快。你应该肯定地知道。
如果您发送和接收Map,您将获得更好的性能。您还将编写更多的代码,但如果您做得正确,它肯定会运行得更快。这取决于你是否喜欢方便而不是性能。
另请参见:
java反射性能
为什么反射很慢?

ax6ht2ek

ax6ht2ek2#

我认为,即使每秒有100次读/写操作,也不会有太多的性能开销。而且使用自定义类是绝对可行的,否则您将不得不使用snapshot.data对象,这可能会导致人为错误等

相关问题