2023年11月02日·阅读约1分钟

Firestore:深入了解 Firebase 的 NoSQL 数据库

深入研究 Firestore(Firebase 的 NoSQL 数据库解决方案),并探索其功能、优势和用例。了解它与其他数据库的比较以及它如何改进您的应用开发流程。

Firestore:深入了解 Firebase 的 NoSQL 数据库

Firestore 也称为 Cloud Firestore,是 Google Firebase 的 NoSQL 数据库 解决方案,旨在为开发人员提供可扩展且多功能的平台,用于构建现代 Web 和移动应用程序。 Firestore 支持实时数据同步、存储和检索,同时提供强大的功能,包括离线支持、分层数据组织和一套全面的查询功能。

Firebase 是 Google 提供的开发平台,提供了一套用于轻松构建、管理和部署应用程序的工具。 Firestore 是该套件的一部分,充当强大且可靠的数据库解决方案,可简化应用程序中的数据持久性和管理过程。

Firestore 的好处

Firestore 为开发人员提供了各种优势,使其成为管理 Web 和移动应用程序中的数据的有吸引力的选择。 Firestore 的一些显着优势包括:

实时同步

Firestore 的实时同步功能可以轻松地跨多个设备和平台传输数据,确保相关更新和更改立即反映给所有用户。此同步功能可帮助开发人员以最少的努力构建高度交互和协作的应用程序。

离线支持

Firestore 为 Web 和移动应用程序提供内置离线支持,使开发人员能够创建即使在用户未连接到互联网时也能无缝运行的应用程序。 Firestore 在设备本地缓存数据,并在连接恢复后与服务器同步更新。

全面的查询支持

Firestore 提供丰富的查询 API,使开发人员能够创建复杂的查询,轻松过滤、排序和操作数据。 Firestore 还支持基于光标的分页,允许应用程序高效加载和显示大型数据集。

分层数据结构

Firestore 使用分层数据模型来组织集合和文档中的数据,以适应复杂和嵌套的数据结构。这种方法可以轻松构建和管理数据,同时提供高度的灵活性和可扩展性。

扩展性强

Firestore 专为大规模而设计,可处理数百万个并发连接并管理大量数据集,而不会影响性能。此功能使 Firestore 成为具有严格性能要求的高流量应用程序的可行选择。

Firestore数据模型

Firestore 的数据模型基于集合和文档的概念,提供数据的分层组织和管理。本节将概述 Firestore 数据模型的关键元素并解释它们的工作原理。

收藏

在 Firestore 中,集合是保存文档的容器。集合有助于以易于查询和管理的方式组织数据。集合还可以包含子集合,从而可以进一步细分相关数据的逻辑分组。

文件

文档是 Firestore 中保存实际数据值的单独记录。一般来说,文档由称为字段的键值对组成,每个字段都有一个名称和一个相应的值。 Firestore 支持各种字段数据类型,包括字符串、数字、布尔值、数组、映射等。 Firestore 中的文档可以被视为可能包含数据和子集合的容器。这种嵌套结构在设计和管理应用程序中的复杂数据结构时提供了更大的灵活性。

图片来源:Firebase 文档

在 Firestore 中组织数据

Firestore 的分层数据模型使开发人员能够高效、直观地构建和组织数据。例如, 电子商务应用程序 可能会将其数据存储在 Firestore 中,结构如下:

  • 产品集合
  • 产品文档
  • 名称字段
  • 价格字段
  • 类别字段
  • 评论子集
  • 审查文件
  • 文本域
  • 评级字段
  • 日期字段

在此结构中,Products 集合包含 Product 文档,每个文档代表一个单独的产品。这些文档包含名称、价格和类别信息字段。每个产品文档都有一个 Reviews 子集合,其中包含用户生成的产品评论的评论文档。通过利用 Firestore 的分层数据模型,开发人员可以轻松创建和管理复杂的数据结构,确保他们的应用程序保持高性能、可扩展性和可维护性。

在您的应用程序中设置 Firestore

在应用程序中设置 Firestore 的过程非常简单。第一步是创建一个 Firebase 项目,它将提供一个集中空间来管理所有 Firebase 产品和服务。以下是设置 Firestore 的基本步骤:

  1. 创建 Firebase 项目: 注册 Firebase 帐户、创建新项目或使用现有项目(如果您已有项目)。导航到 Firebase 控制台并按照屏幕上的说明进行操作。

  2. 将 Firestore 添加到您的项目: 设置项目后,单击左侧菜单中的“数据库”部分。选择“创建数据库”,然后在弹出窗口中选择“Firestore”。按照设置选项并在 Firebase 项目中创建一个新的 Firestore 数据库实例。

  3. 配置 Firebase SDK: 要在 Web 或移动应用中使用 Firestore,您需要将 Firebase SDK 添加到您的项目中。您可以在 Firebase 控制台的“项目设置”下找到 SDK 配置代码片段。配置代码将包括项目的唯一 API 密钥、身份验证域、项目 ID 以及连接 Firebase 服务所需的其他设置。将代码片段添加到应用程序的 HTML、JavaScript、Android 或 iOS 项目中。

  4. 初始化 Firestore: 将 Firebase SDK 添加到项目后,使用以下代码片段初始化 Firestore:

    对于 JavaScript:

     import { initializeApp } from 'firebase/app'; import { getFirestore } from 'firebase/firestore'; const firebaseApp = initializeApp({ apiKey: "[API_KEY]", authDomain: "[AUTH_DOMAIN]", projectId: "[PROJECT_ID]", ... }); const db = getFirestore(firebaseApp);
    

    对于 Android(科特林):

     import com.google.firebase.FirebaseApp import com.google.firebase.firestore.FirebaseFirestore val firebaseApp = FirebaseApp.initializeApp(this) val db = FirebaseFirestore.getInstance()
    

    对于 iOS(斯威夫特):

     import FirebaseFirestore let db = Firestore.firestore()
    
  5. 开始使用 Firestore: Firestore 初始化后,您现在可以使用它来读取和写入数据、设置实时侦听器并对数据执行各种操作。

Firebase 实时数据库与 Firestore

Firebase 提供两种数据库解决方案:Firebase 实时数据库和 Firestore。虽然这两个数据库都为网络和移动平台提供实时数据同步和客户端 SDK,但它们在几个方面有所不同。我们来比较一下两个数据库:

数据模型和结构

Firebase 实时数据库使用类似 JSON 的 数据模型,该模型是一个大型节点树。此数据模型可能会使查询和构造复杂数据变得具有挑战性,特别是对于分层数据或嵌套数组。另一方面,Firestore 使用包含集合和文档的分层数据模型,提供更直观的数据结构化和查询方式。 Firestore 数据模型允许嵌套子集合,这可以帮助更有效地管理复杂的嵌套数据。

查询能力

与实时数据库相比,Firestore 提供更全面的查询功能。借助 Firestore,开发人员可以执行复杂的查询,例如链接多个 orderBy 和 where 子句、执行数组操作以及对结果进行分页。相比之下,实时数据库的查询功能更加有限,这使得在没有额外的计算成本和客户端或服务器端逻辑复杂性的情况下执行复杂的查询或分页变得具有挑战性。

可扩展性

Firestore 专为全球规模的应用程序而设计,具有强大的水平可扩展性以及处理数百万并发用户和数十亿文档的能力。实时数据库虽然更适合某些情况,但在不依赖数据分片策略的情况下可能难以扩展。 Firestore 确保低延迟访问和自动多区域复制,以保持高可用性和持久性,使其适合企业和高流量用例。

价钱

Firestore 和实时数据库的定价结构不同。 Firestore 的收费基于文档读取、写入和删除以及数据存储和网络使用情况。实时数据库的收费基于存储的数据量、数据库连接数和网络使用情况。根据应用程序的数据访问模式和使用情况,一个数据库可能更具成本效益。

虽然 Firestore 和实时数据库提供实时数据同步功能,但 Firestore 更适合需要复杂查询、分层数据结构和全局规模性能的应用程序。实时数据库可能更适合更简单的用例,其中类似 JSON 的数据模型和较低成本的定价结构更有意义。

查询 Firestore 中的数据

添加认证与支付
使用 AppMaster 的认证模块和 Stripe 创建注册与结账流程。
立即构建

Firestore提供了一套全面的查询功能,允许开发人员有效地检索和过滤数据。基本查询包括获取单个文档、获取文档集合以及根据字段值过滤文档。更高级的查询涉及对结果进行排序、限制和分页。让我们探讨一些常见的 Firestore 查询:

获取单个文档

要通过 ID 获取单个文档,您可以使用以下代码片段:

 // JavaScript import { getDoc, doc } from 'firebase/firestore'; async function getDocument(documentId) { const documentRef = doc(db, 'collection_name', documentId); const documentSnapshot = await getDoc(documentRef); if (documentSnapshot.exists()) { console.log('Document data:', documentSnapshot.data()); } else { console.log('No such document'); } }

获取文档集合

要获取集合中的所有文档,请使用以下代码片段:

 // JavaScript import { getDocs, collection } from 'firebase/firestore'; async function getAllDocuments() { const collectionRef = collection(db, 'collection_name'); const querySnapshot = await getDocs(collectionRef); querySnapshot.forEach((doc) => { console.log(doc.id, '=>', doc.data()); }); }

过滤文档

Firestore 允许您根据一个或多个字段条件过滤文档。以下代码片段展示了如何根据单个字段过滤文档:

 // JavaScript import { query, where, getDocs, collection } from 'firebase/firestore'; async function getFilteredDocuments() { const collectionRef = collection(db, 'collection_name'); const q = query(collectionRef, where('field_name', '==', 'value')); const querySnapshot = await getDocs(q); querySnapshot.forEach((doc) => { console.log(doc.id, '=>', doc.data()); }); }

对文档进行排序和分页

要对结果进行排序和分页,您可以使用 orderBy、limit 以及 startAfter 或 startAt 方法。以下是对文档进行排序和分页的方法:

 // JavaScript import { query, orderBy, limit, getDocs, collection, startAfter } from 'firebase/firestore'; async function getSortedAndPaginatedDocuments(lastVisible) { const collectionRef = collection(db, 'collection_name'); const q = query( collectionRef, orderBy('field_name', 'asc'), startAfter(lastVisible), limit(10) ); const querySnapshot = await getDocs(q); querySnapshot.forEach((doc) => { console.log(doc.id, '=>', doc.data()); }); }

这些只是 Firestore 为开发人员提供的查询功能的几个示例,这些功能使开发人员可以根据各种应用程序的需要轻松高效地访问和筛选数据。

Firestore 安全规则

Firestore 安全规则是一种基于用户身份验证和自定义条件来控制对 Firestore 数据的访问的强大方法。通过编写和配置安全规则,您可以确保用户只能访问他们应该访问的资源,从而保护敏感信息并防止意外的数据修改。

Firestore 中的安全规则存储在 Firebase 控制台中,并与 Firestore 数据库一起部署。它们使用自定义语法,可以在 Firebase 控制台内或使用本地开发环境进行编写和测试。要开始使用 Firestore 安全规则,让我们看看一些常见场景以及如何实施它们:

  1. 允许对公共数据的读取访问: 要允许任何用户读取公共数据,您可以设置安全规则,授予对特定集合的访问权限,而无需进行身份验证。 rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /public_data/{document=**} { allow read; } } }
  2. 限制经过身份验证的用户的读取权限: 如果要确保只有经过身份验证的用户才能读取某些文档,可以使用 request.auth 对象来验证用户的身份验证状态。 rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /private_data/{document=**} { allow read: if request.auth != null; } } }
  3. 允许对用户拥有的数据进行写访问: 要授予用户创建、更新或删除其数据的能力,您可以使用将文档的用户 ID 与经过身份验证的用户 ID 相匹配的安全规则。 rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /user_data/{userId}/{document=**} { allow write: if request.auth.uid == userId; } } }
  4. 写入前验证数据: Firestore 安全规则还可以在允许写入操作之前强制执行数据验证。例如,您可以确保用户的显示名称不超过特定字符限制。 rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /user_profiles/{userId} { allow create, update: if request.auth.uid == userId && request.resource.data.displayName.size() < 30; } } }

这些示例演示了一些常见的 Firestore 安全规则用例,但可能性几乎是无限的。借助富有表现力的语法和强大的匹配功能,您可以创建复杂的安全规则来保护您的 Firestore 数据并维护安全的环境。

优化 Firestore 性能

制作实时功能原型
使用 AppMaster 的可视化工具并以 Firestore 作为数据层,更快交付实时体验。
试用 AppMaster

Firestore 旨在提供快速可靠的实时数据同步,但优化 Firestore 数据库的性能以确保最佳用户体验至关重要。以下是一些可帮助您充分利用 Firestore 的提示:

  1. 批量操作: 当您需要在短时间内执行多次写入操作时,可以考虑使用批量写入将操作组合在一起。批量写入可以通过减少客户端和 Firestore 后端之间的往返次数来提高性能。
  2. 限制查询结果: Firestore 性能取决于查询返回的文档数量。为了提高性能,请使用分页来限制返回的文档数量,并仅请求应用程序需要的数据。
  3. 使用非规范化数据: 在某些情况下,存储冗余或非规范化数据有助于减少复杂查询和连接的需要。通过跨相关集合或文档复制数据,您可以简化查询并减少所需的读取。
  4. 优化数据存储: 确保数据的结构高效并以最小化开销的方式存储。这可能包括使用较短的字段名称来减少存储大小或使用整数时间戳而不是日期时间值的 ISO 字符串。
  5. 在客户端缓存数据: 要提高应用程序的响应能力,请考虑在客户端缓存从 Firestore 检索的数据。这有助于减少对实时数据同步的依赖,并最大限度地减少常见操作所需的 Firestore 读取次数。
  6. 监控 Firestore 性能: Firebase 提供了用于监控 Firestore 数据库性能的工具,例如 Firebase 性能监控 SDK。定期检查这些指标可以帮助识别潜在的优化领域并确保您的数据库平稳运行。

通过遵循这些性能优化技巧并监控 Firestore 使用情况,您可以确保基于 Firestore 的应用程序为用户提供尽可能最佳的体验。

Firestore 定价

强化访问与规则
将 Firestore Security Rules 与 AppMaster 的认证流程结合,实现更安全的访问控制。
设置

Firestore 采用即用即付定价模式,成本由各种资源的使用情况决定,包括:

  1. 文档存储: Firestore 文档中存储的数据量会影响成本,因为您需要按每 GiB 支付存储费用。
  2. 文档读取、写入和删除: 使用 Firestore,您需要为数据库上的每次读取、写入和删除操作付费。随着使用量的增长,监控操作计数对于控制成本至关重要。
  3. 网络使用情况: Firestore 对超出特定阈值的出站网络流量收费。该费用取决于传输的数据量和目的地区域。

除了这些即用即付费用之外,Firestore 还提供慷慨的免费套餐作为 Firebase 免费计划的一部分,其中包括:

  • 1 GiB 存储空间
  • 每天 50,000 次文档读取
  • 每天写入 20,000 个文档
  • 每天删除 20,000 个文档
  • 每月 10 GiB 的网络使用量

Firestore 的定价模型可随着应用程序需求的变化提供灵活性和可扩展性。监控您的使用情况并优化 Firestore 实施以有效地平衡性能和成本至关重要。

通过了解 Firestore 安全规则、优化其性能并有效管理成本,您可以在 Firebase 应用程序中充分利用这一强大的 NoSQL 数据库解决方案。请记住考虑将 Firestore 与 AppMaster 集成,以获得高效的 无代码 应用程序构建体验。

Firestore 用例

Firestore 强大的功能、实时数据同步和可扩展架构使其成为各种应用程序和行业的理想解决方案:

  • 协作应用程序: Firestore 的实时同步功能非常适合创建协作工具,例如项目管理软件、消息传递应用程序和共享文档编辑器(用户需要即时访问更新的信息)。
  • 游戏应用程序: Firestore 提供的实时和分层数据结构使其成为构建多人在线游戏应用程序和有效管理游戏状态的合适选择。
  • 电子商务平台: Firestore可以帮助在线商店所有者管理大型产品目录、跟踪库存并保存用户数据(例如购物车、订单历史记录和用户个人资料)。随着业务的增长,这可以实现个性化的购物体验和无缝扩展。
  • 物联网 (IoT): Firestore 能够实时存储和同步连接设备的数据,使其成为 IoT 应用程序的可靠选择,使开发人员能够轻松跟踪和分析来自传感器和其他 IoT 设备的数据流。
  • 内容管理系统 (CMS): Firestore 是构建自定义 CMS 解决方案 的理想数据存储,具有实时功能、高级查询功能和强大的访问控制功能,可简化网站和应用内容的管理。
  • 分析和监控: Firestore 可以集成到监控和分析应用程序的后端中,以实时可视化、聚合和分析传入数据,同时应用复杂的查询功能。

将 Firestore 与AppMaster集成

构建基于 Firestore 的应用
在 AppMaster 中构建后端、Web 应用和移动应用,然后通过 API 连接 Firestore。
开始构建

为了进一步简化和加快应用程序的构建和维护,您可以将 Firestore 作为主要数据存储解决方案无缝集成到AppMaster应用程序中。 AppMaster提供了一个no-code平台,使用户无需编写一行代码即可构建后端、Web 和 移动应用程序

可以通过 REST API 和 WSS 端点实现与 Firestore 的集成,从而使开发人员能够通过AppMaster平台高效地访问和管理 Firestore 数据。通过将 Firestore 强大的实时数据同步与AppMaster的drag-and-drop界面、灵活的 数据模型 和可视化设计系统相结合,您可以创建专业、用户友好的 Web 和移动应用程序,速度提高 10 倍,成本降低 3 倍。比传统的开发方法更有效。

此外, AppMaster还具有 业务流程 (BP) 设计器,允许用户直观地创建后端、Web 或移动应用程序逻辑,而无需手动编码。将 Firestore 与AppMaster相结合可以实现实时同步,消除技术债务,并消除对手动编码的昂贵依赖,使 Firestore 比以往更加通用。

结论

Google Firestore 是一种功能强大、可扩展且灵活的 NoSQL 数据库解决方案,有利于现代应用程序开发,包括实时数据同步和离线支持。其分层数据模型、强大的查询功能和安全规则使其成为为其 Web 和移动应用程序寻求全面数据解决方案的开发人员的有吸引力的选择。

通过将 Firestore 与AppMasterno-code平台集成,您可以利用其高级功能,同时受益于no-code开发环境的简单性、速度和成本效益。将 Firestore 的强大功能与AppMaster的可视化设计系统、灵活的数据模型和 Business Process Designer 相结合,您可以高效地构建满足当今不断发展的数字领域的高性能应用程序。

常见问题

什么是 Firestore?

Firestore 是 Google Firebase 的 NoSQL 数据库解决方案,旨在为构建现代 Web 和移动应用程序提供可扩展的实时数据同步和管理。

Firestore 的主要优点是什么?

Firestore为应用开发者提供实时同步、离线支持、全面的查询支持、分层数据结构、强大的可扩展性和健壮的安全规则。

Firestore 与 Firebase 实时数据库相比如何?

与 Firebase 实时数据库相比,Firestore 提供更灵活的数据模型、更好的查询支持和更高的可扩展性。但是,对于特定用例,实时数据库可能更简单且更具成本效益。

数据如何存储在 Firestore 中?

Firestore 将数据组织在集合和文档中,提供层次结构。集合包含文档,文档可能包含子集合,使开发人员能够有效地存储复杂和嵌套的数据。

Firestore 适合高流量应用吗?

是的,Firestore 旨在为 Web 和移动应用程序提供强大的可扩展性,使其成为具有严格性能要求的高流量应用程序的理想选择。

Firestore如何与AppMaster集成?

Firestore 可以使用 REST API 和 WSS 端点轻松与AppMaster平台集成,使开发人员能够在其no-code后端、Web 和移动应用程序中高效访问和管理 Firestore 数据。

如何在应用程序中设置 Firestore?

可以在您的应用程序中设置 Firestore,方法是通过 Firebase 连接它、初始化 Firestore 库并配置在应用程序环境中工作所需的选项。

Firestore 安全规则是什么?

Firestore 安全规则是配置设置,可帮助您管理对 Firestore 数据的访问,使您可以根据各种条件保护和验证数据访问和修改。

Firestore 定价如何运作?

Firestore 定价基于即用即付模式,包括文档存储、文档读取、写入和删除以及网络使用的成本。可通过 Firebase 免费套餐获得免费使用套餐。

容易上手
创造一些 惊人的东西

使用免费计划试用 AppMaster。
准备就绪后,您可以选择合适的订阅。

开始吧