GCP FireStore 核心知识点


最佳实践

  1. 数据库位置:选择距离您的用户最近的数据库位置和计算资源。

  2. 文档ID

    • 不要使用 . 和 .. 作为文档 ID。
    • 避免在文档 ID 中使用正斜杠 /。
    • 不要使用单调递增的文档 ID,例如:
      Customer1, Customer2, Customer3, ...
      Product 1, Product 2, Product 3, ...
      此类顺序 ID 可能会产生热点问题,从而增加延迟时间。
  3. 字段名称 避免在字段名称中使用以下字符,因为它们需要额外的转义:

    • 句点 .
    • 左中括号 [
    • 右中括号 ]
    • 星号 *
    • 反引号 `
  4. 索引:不用使用太多索引,过多的索引会增加写入延迟时间&增加索引条目的存储费用。

  5. 读写操作:写入文档速率 > 1s/文档;使用异步调用;不用使用偏移,而使用游标。

数据模型

Firestore 是一种基于文档的 NoSQL 数据库。与 SQL 数据库不同的是,它没有表格或行的概念,而是将数据存储在文档中,并将文档组织为集合。

每个文档包含一组键值对。Firestore 经过优化,可用于存储小型文档的大型集合。

所有文档必须存储在集合中。文档可以包含子集合和嵌套对象,两者都可以包括原始字段(如字符串)或复杂对象(如列表)。

集合和文档是在 Firestore 中隐式创建的。 只需将数据分配给集合中的文档即可。如果集合或文档不存在,Firestore 会创建一个。

文档

在 Firestore 中,存储单元是文档。文档是一个轻量级记录,包含映射到值的字段。每个文件都用一个名称进行标识. (注:在 Console 中如果不填写文档名称,会自动生一个)

文档中的复杂嵌套对象称为映射。例如,您可以使用映射设计上例中用户名的结构,如下所示:

name :
    first : "Ada"
    last : "Lovelace"
born : 1815

格式类似于 JSON,可以将文档视为轻量级的 JSON.

集合

文档存在于集合中,集合是文档的容器。 Firestore 是无架构的,所以您可以自由选择在每个文档中设置什么字段以及在这些字段中存储什么数据类型。同一集合中的文档可以全部包含不同的字段或在这些字段中存储不同类型的数据。但是,最好在多个文档中使用相同的字段和数据类型,以便您可以更轻松地查询文档。 集合中的文档名称是唯一的。

分层结构

分层结构,主要就是构建了子集和。

索引

Firestore 为所有查询使用索引,以确保较高的查询性能。正因于此,查询的性能取决于结果集的大小,而不是数据库中的条目数量。

Firestore 使用了两种索引类型:单字段索引和复合索引。除了编入索引的字段数量不同之外,单字段索引和复合索引的管理方式也不同。

单字段索引

单字段索引会为一个集合中包含某个特定字段的所有文档存储一个映射,并按顺序排序。单字段索引中的每个条目会记录文档中一个特定字段的值,以及该文档在数据库中的位置。Firestore 使用这些索引执行多项基本查询。您可以通过配置数据库的自动索引设置和索引例外项来管理单字段索引。

默认情况下,Firestore 会自动为文档中的每个字段和映射中的每个子字段维护单字段索引。

复合索引

复合索引根据要建立索引的字段的有序列表为一个集合中的所有文档存储一个映射,并按顺序排序。