【问题标题】:Android Firestore limitations to custom object modelsAndroid Firestore 对自定义对象模型的限制
【发布时间】:2019-06-09 03:45:16
【问题描述】:

我正在迁移我的应用以使用 Firebase Firestore,我的一个模型非常复杂(包含其他自定义对象的列表)。查看文档,关于如何将模型对象提交为文档,看起来您只需使用公共构造函数以及 getter 和 setter 创建模型对象。

例如来自添加数据指南:

public class City {
    private String name;
    private String state;
    private String country;
    private boolean capital;
    private long population;
    private List<String> regions;

    public City() {}

    public City(String name, String state, String country, boolean capital, long population, List<String> regions) {

    // getters/setters
}

Firestore 会自动将其转换为文档,无需任何额外步骤。您将实例传递给 DocumentReference.set(city) 调用,并从对 DocumentSnapshot.toObject(City.class) 的调用中检索它

它究竟是如何将其序列化为文档的?通过反思?它没有讨论任何限制。基本上,我想知道这是否适用于更复杂的模型,以及复杂程度。它适用于具有ArrayList 自定义对象的类吗?

【问题讨论】:

  • 你在一个问题中问了很多事情。
  • 它使用反射。这对于将数据映射到 POJO (JavaBean) 类型对象的系统很常见。仅使用 getter 和 setter,或公共成员字段。
  • @DougStevenson 谢谢。它是否适用于最终归结为 POJO 类型的自定义对象列表?像 A 包含一个 B 列表,其中包含一个 C 列表,其中包含 POJO 类型
  • 我不确定你的意思。我建议您编写一些代码来做您想做的事,然后在此处发回说明您具体尝试做的事情以及无法按您期望的方式工作的代码。

标签: java android firebase google-cloud-firestore


【解决方案1】:

Firestore 会自动将其转换为文档,无需任何额外步骤。它究竟是如何将其序列化为文档的?通过反射?

通过反思,您猜对了。正如@Doug Stevenson 在他的评论中提到的那样,对于像 Firebase 这样的系统来说,将 JSON 数据转换为 POJO(普通旧 Java 对象)是很常见的。另请注意,setter 不是必需的。如果 JSON 属性没有设置器,Firebase 客户端会将值直接设置到字段中。也不需要带参数的构造函数。虽然两者都是惯用的,但在没有它们的情况下也有很好的案例。还请查看有关no-argument constructor 存在的一些信息。

它没有讨论任何限制。

是的。官方文档解释说文档有限制。因此,在您可以将多少数据放入文档时存在一些限制。根据usage and limits的官方文档:

文档的最大大小:1 MiB(1,048,576 字节)

如您所见,单个文档中的数据总量限制为 1 MiB。当我们谈论存储文本时,您可以存储几乎所有内容,但随着您的数组变得越来越大(使用自定义对象),请注意此限制。

还请注意,如果您在数组中存储大量数据并且这些数组应该由大量用户更新,那么您需要注意另一个限制。因此,每个文档每秒只能写入 1 次。因此,如果您遇到很多用户都试图一次将数据写入/更新到相同文档的情况,您可能会开始看到其中一些写入失败。所以,也要小心这个限制。

它是否适用于具有自定义对象的 ArrayList 的类?

它适用于任何类型的类,只要是supported data type 对象。

基本上,我想知道这是否适用于更复杂的模型,以及复杂程度。

只要您为对象使用正确的数据类型并且您的文档在 1 MIB 限制内,它就可以与任何复杂模型王一起使用。

【讨论】:

  • 谢谢!这解释了我一直在寻找的一切。
  • 如果能够注册自定义适配器以避免像 moshi 和 kotlinx.serialization 这样的反射步骤,那就太好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 1970-01-01
  • 2019-02-12
  • 2020-04-23
  • 2019-06-26
  • 2014-11-06
相关资源
最近更新 更多