iOS版Cloud Firestore入门

2022-04-08 00:00:00 查询 数据 数据库 文档 集合

多年来,移动编码人员一直在利用Google的移动后端即服务 (MBaaS)平台Firebase实时数据库 ,从而帮助他们专注于为自己的应用程序构建功能,而不必担心后端基础结构和数据库。 通过简化在云中存储和持久存储数据并确保身份验证和安全性,Firebase允许编码人员将精力集中在客户端上。

去年,Google宣布了又一个后端数据库解决方案Cloud Firestore ,该解决方案是从头开始构建的,具有更大的可扩展性和直观性。 但是,这相对于Google已经存在的旗舰产品Firebase Realtime Database而言 ,引起了一些困惑。 本教程将概述两个平台之间的差异以及每个平台的独特优势。 您将通过构建简单的提醒应用程序来学习如何使用Firestore文档参考以及实时读取,写入,更新和删除数据。

本教程的目标

本教程将向您介绍Cloud Firestore 。 您将学习如何利用该平台实现实时数据库持久性和同步。 我们将讨论以下主题:

  • 什么是Cloud Firestore
  • Firestore数据模型
  • 设置Cloud Firestore
  • 创建和使用Cloud Firestore参考
  • 从Cloud Firestore实时读取数据
  • 创建,更新和删除数据
  • 过滤和复合查询

假设知识

本教程假定您已接触过Firebase,并具有使用Swift和Xcode进行开发的背景知识。

什么是Cloud Firestore?

与Firebase Realtime Database一样,Firestore为移动和Web开发人员提供了一个跨平台的云解决方案,无论网络延迟或Internet连接如何,都可以实时持久存储数据,并且可以与Google Cloud Platform产品套件无缝集成。 伴随着这些相似之处,存在着明显的优缺点,它们彼此区别。

资料模型

从根本上讲,实时数据库将数据存储为一棵大的整体式分层JSON树,而Firestore将数据组织在文档,集合和子集合中。 这需要较少的非规范化。 在处理简单数据需求时,将数据存储在一个JSON树中具有简化的好处。 但是,在处理更复杂的分层数据时,规模化变得更加麻烦。

离线支援

两种产品都提供离线支持,在没有潜在的或没有网络连接的情况下主动将数据缓存在队列中—尽可能将本地更改同步回后端。 Firestore除了支持移动应用程序外,还支持Web应用程序的脱机同步,而Realtime Database仅支持移动同步。

查询和交易

实时数据库仅支持有限的排序和过滤功能-您只能在单个查询中在属性级别上进行排序或过滤,而不能同时在两者上进行排序或过滤。 查询也很深,这意味着它们会返回结果的大子树。 该产品仅支持需要完成回调的简单写入和事务操作。

另一方面,Firestore引入了具有复合排序和筛选功能的索引查询,使您可以组合操作以创建链式筛选器和排序功能。 您也可以执行浅层查询,以返回子集合来代替使用实时数据库获得的整个集合。 事务本质上是原子的,无论您发送批处理操作还是单次发送,事务都会自动重复直到结束。 此外,实时数据库仅支持单个写入事务,而Firestore原子地提供批处理操作。

性能和可伸缩性

正如您所期望的那样,实时数据库非常健壮并且具有低延迟。 但是,根据区域可用性,数据库仅限于单个区域。 另一方面,Firestore可在多个区域和区域中水平放置数据,以确保真正的全局可用性,可伸缩性和可靠性。 实际上,谷歌已经承诺Firestore会比实时数据库更可靠。

实时数据库的另一个缺点是限制了100,000个并发用户(单个数据库中有100,000个并发连接和1,000次写入/秒),之后您必须将数据库分片(将数据库拆分成多个数据库)以支持更多用户。 Firestore无需干预即可自动跨多个实例扩展。

Firestore从头开始设计,考虑到可伸缩性,它具有新的原理图体系结构,可跨多个区域复制数据,进行身份验证并在其客户端SDK中处理所有与安全性有关的事务。 它的新数据模型比Firebase更直观,与其他类似的NoSQL数据库解决方案(如MongoDB)更相似,同时提供了更强大的查询引擎。

安全

Firestore数据模型

Firestore是基于NoSQL文档的数据库,由文档集合组成,每个文档集合都包含数据。 由于它是NoSQL数据库,因此您将不会在关系数据库中找到表,行和其他元素,而会在文档中找到键/值对的集合。

您可以通过将数据分配给文档来隐式创建文档和集合,如果该文档或集合不存在,则将自动为您创建文档或集合,因为该集合始终必须是根(个)节点。 这是您不久将要处理的项目的简单Tasks示例架构,它由Tasks集合以及包含两个字段(名称(字符串)和是否完成任务的标志)的大量文档组成(布尔) 。


让我们分解每个元素,以便您可以更好地理解它们。

馆藏

集合与SQL世界中的数据库表同义,集合包含一个或多个文档。 集合必须是架构中的根元素,并且只能包含文档,而不能包含其他集合。 但是,您可以引用文档,而文档又引用集合(子集合)。


在上图中,任务包含两个基本字段(名称和完成)以及一个子集合(子任务),该子集合包含其自身的两个基本字段。

文件资料

文档由键/值对组成,值具有以下类型之一:

  • 基本字段(例如字符串,数字,布尔值)
  • 复杂的嵌套对象(基元的列表或数组)
  • 子集合

嵌套对象也称为地图,可以在文档中表示如下。 以下是分别嵌套对象和数组的示例:

  1. 相关文章