热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java–在Firestore中构造此类数据的正确方法是什么?

我从GoogleFirebase服务中看过视频并阅读了Cloudfirestore的文档,但我无法想象实时数据库.我想到了这个Web应用程序,我希望从不同类别的产品中存储我的提供程

我从Google Firebase服务中看过视频并阅读了Cloud firestore的文档,但我无法想象实时数据库.

我想到了这个Web应用程序,我希望从不同类别的产品中存储我的提供程序.我希望通过我的所有产品执行搜索查询,以查找我对此类产品的提供商,并最终访问该提供商信息.

我打算为此目的使用这个结构:

Providers ( Collection )
Provider 1 ( Document )
Name
City
Categories
Provider 2
Name
City
Products ( Collection )
Product 1 ( Document )
Name
Description
Category
Provider ID
Product 2
Name
Description
Category
Provider ID

所以我的问题是,一旦我得到我想要的产品,这种方法是否是访问提供商信息的正确方法?

我知道在实时数据库中这是可能的,使用我可以在提供者部分中搜索该提供者的提供者ID,但是使用Firestore我不确定它是否可行或者这是否正确.

解决方法:


What is the correct way to structure this kind of data in firestore?


您需要知道构建Cloud Firestore数据库没有“完美”,“最佳”或“正确”的解决方案.最佳和正确的解决方案是满足您需求的解决方案,使您的工作更轻松.请记住,NoSQL数据库世界中也没有单一的“正确的数据结构”.所有数据都经过建模,以允许您的应用所需的用例.这意味着适用于一个应用程序的内容可能不足以用于其他应用程序.所以每个人都没有一个正确的解决方案. NoSQL类型数据库的有效结构完全取决于您打算如何查询它.

您构建数据的方式对我来说很好.一般来说,有两种方法可以实现同样的目的.第一个是在产品对象中保留提供者的引用(如您所做)或复制产品文档中的整个提供者对象.最后一个tehnique称为非规范化,对于Firebase来说是一种非常普遍的做法.因此,我们经常在nosql数据库中复制数据,以适应其他情况下可能无法实现的查询.为了更好地理解,我建议您看到此视频,Denormalization is normal with the Firebase Database.它适用于Firebase实时数据库,但同样的原则适用于Cloud Firestore.

此外,当您复制数据时,有一件事需要记住.与添加数据的方式相同,您需要对其进行维护.换句话说,如果要更新/拒绝提供者对象,则需要在其存在的每个位置执行此操作.

你现在可能想知道,哪个tehnique是最好的.从一般意义上讲,在NoSQL数据库中存储引用或重复数据的最佳方法完全取决于项目的要求.

因此,您应该问自己一些关于要复制的数据的问题,或者只是将其作为参考:

>是静态的还是会随着时间而改变?
>如果是,您是否需要更新每个重复的数据实例,以便它们保持同步?这就是我之前也提到过的.
>说到Firestore,你是在优化performance还是cost?

如果您的重复数据需要更改并在同一时间保持同步,那么您将来可能很难将所有重复数据保持最新.这也可能意味着您花费了大量资金保留所有这些文档,因为每次更改都需要对每个文档进行读写.在这种情况下,仅持有参考将是获胜变体.

在这种方法中,您编写的重复数据非常少(几乎只是提供者ID).这意味着您编写此数据的代码将变得非常简单且非常快.但是在读取数据时,您需要从两个集合中加载数据,这意味着需要额外的数据库调用.对于合理数量的文档,这通常不是一个大的性能问题,但肯定需要更多的代码和更多的API调用.

如果您的查询速度非常快,您可能希望复制更多数据,以便客户端只需要查询每个查询的文档,而不是多个文档.但您也可以依赖本地客户端缓存使其更便宜,具体取决于客户端必须读取的数据.

在此方法中,您为每个产品文档复制供应商的所有数据.这意味着编写此数据的代码更加复杂,您肯定会存储更多数据,每个产品文档还有一个提供程序对象.而且您需要弄清楚是否以及如何使每个文档保持最新.但另一方面,阅读产品文档现在可以在一次阅读中为您提供有关提供者文档的所有信息.

这是NoSQL数据库中的一个常见考虑因素:您通常必须考虑写入性能和磁盘存储与读取性能和可伸缩性.

如果您选择是否复制某些数据,则高度依赖于您的数据及其特征.你必须根据具体情况来考虑.

所以最后,请记住两者都是有效的方法,并且它们都没有比另一方更有针对性.这一切都取决于您的用例是什么以及您对这种重复数据的新方法的满意程度.数据复制是快速读取的关键,不仅仅是在Cloud Firestore或Fireabase实时数据库中,而且通常也是如此.每次将相同数据添加到其他位置时,都会复制数据以支持更快的读取性能.不幸的是,作为回报,您有更复杂的更新和更高的存储/内存使用率.但是你需要注意Firebase实时数据库中的额外调用,并不昂贵,在Firestore中.多少数据复制数据与额外的数据库调用最适合您,取决于您的需求以及您是否愿意放弃“单点定义思维模式”,这可以称为非常主观.

完成几个Firebase项目后,我发现如果我复制数据,我的阅读代码会变得非常简单.但当然,编写代码同时变得更加复杂.这两者之间的权衡和您的需求决定了应用程序的最佳解决方案.此外,为了更加精确,您还可以使用现有工具衡量应用中发生的情况并做出相应决定.我知道这不是具体的建议,但这是软性的发展.一切都是关于衡量事物的.

还要记住,某些数据库结构更容易受到某些安全规则的保护.因此,尝试使用Cloud Firestore Security Rules找到一个易于保护的模式.

另请参阅我在post的答案,其中我已经解释了有关Firestore中的集合,地图和数组的更多信息.


推荐阅读
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
author-avatar
tony2502877947
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有