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

Firebase用于复杂查询。不行吗

如何解决《Firebase用于复杂查询。不行吗》经验,为你挑选了1个好方法。

对于我的新项目,我已经从解析服务器转移到了Firebase,但是在项目中我开始认为这是个坏主意。

基本上,我正在开发一个应用程序,人们可以在该应用程序中发布有关其镇上正在进行的音乐会的信息。

我的第一个挑战是过滤事件,因此用户只能在自己的城镇中获得事件。我通过构建城市之后的数据来完成此任务:

{
    concerts: {
        "New york": {
            ...,
            ...
        }, 
        "Chicago": {
            ...,
            ...
        }
    }
}

然后我认为我需要针对音乐会类型的另一个过滤器,例如摇滚,流行音乐等。因此,尽管我进行了另一次重组。但是,可能需要再增加5到10个过滤器,而以良好的方式构造数据库将变得非常困难。

我虽然关于多个查询,但是这是不允许的:

firebase.database().ref("concerts")
.orderByChild("type").equalTo("rock")
.orderByChild("length").equalTo("2")
.orderByChild("artist").equalTo("beatles")

我考虑过从服务器获取所有内容,然后在客户端中过滤结果。但是,我看到了两个问题:

    可能会下载大量不必要的数据。

    某些音乐会将仅被锁定给某些用户(例如,至少参加过其他10场音乐会的用户),并且可能存在安全方面的问题,将这些音乐会带回家以防止用户看到他们。

我曾考虑过将过滤器组合在一起以创建查询键,就像这样,但是如果有10多个过滤器,它将变得很复杂。

有解决方案吗?还是我应该忘记此用例的Firebase?

提前致谢



1> Jay..:

可以在Firebase中制作极其复杂的查询。数据需要存储在一个易于查询的结构中,最重要的是,不要害怕重复数据。

例如,假设我们有一个应用程序,使用户可以选择特定年份和月份,特定城市和特定流派的音乐会。

有3个参数

year_month城市类型

用户界面首先查询用户以选择城市

Austin

然后用户界面要求选择年份和月份

201704

然后一种流派

Rock

您的Firebase结构如下所示

concerts
  concert_00
   city: Memphis
   year_month: 201706
   genre: Country
   city_date_genre: Memphis_201606_Country
  concert_01
   city: Austin
   year_month: 201704
   genre: Rock
   city_date_genre: Austin_201704_Rock
  concert_02
   city: Seattle
   year_month: 201705
   genre: Disco
   city_date_genre: Seattle_201705_Disco

您的用户界面已经向用户轮询了查询信息,并以此构建查询字符串

Austin_201704_Rock

然后在“ city_date_genre”节点中查询该字符串,您便拥有了数据。

如果用户想了解奥斯汀2017年4月的所有音乐会怎么办

queryStartingAt("Austin_201704").queryEndingAt("Austin_201704")

您可以通过添加另一个查询节点并更改数据顺序来轻松扩展此功能

concerts
  concert_00
   city: Memphis
   year_month: 201706
   genre: Country
   city_date_genre: Memphis_201606_Country
   city_genre_date: Memphis_Country_201606

根据用户选择数据的顺序,您可以查询关联的节点。

添加其他节点只需要少量数据,并且可以对所需数据进行开放式查询。


推荐阅读
  • 目录摘要SQL的现在NoSQL,NotOnlySQL要分布式,也要SQL总结引用摘要毫不夸张的说,关系数据库是企业软件系统的核心,企业形形色色信息行为的背后,都有关系数据库的支撑。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 前面刚有AWS开战MongoDB,双方“隔空互呛”,这厢又曝出2亿+简历信息泄露——MongoDB的这场开年似乎“充实”得过分了些。长期以来,作为“最受欢迎的NoSQL数据库”,M ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 在Ubuntu中安装MongoDB
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Qt提供了QtSql模块来提供平台独立的基于SQL的数据库操作。这里我们所说的“平台独立”,既包括操作系统平台,有包括各个数据库平台。另外, ... [详细]
  • mongoDB介绍、安装、搭建简单的mongoDB服务器(一)
    相关网站1. http:www.mongodb.org 官网,可以下载安装程序,和doc,和驱动等。2. http:www.mongoing.com 国内官方网站,博客,问 ... [详细]
  • NB:我看到我的草稿中已有将近两年的教程,所以我决定将其发布。在本教程中,我将构建一个简单的reactJs应用程序,该应用程 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • MongoDB用户验证auth的权限设置及角色说明
    本文介绍了MongoDB用户验证auth的权限设置,包括readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、cluster相关的权限以及root权限等角色的说明和使用方法。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
author-avatar
手机用户2502915433
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有