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

当数据以扇出方式位于多个路径时,如何在Firebase数据库中进行一致删除?

如何解决《当数据以扇出方式位于多个路径时,如何在Firebase数据库中进行一致删除?》经验,为你挑选了1个好方法。

使用Firebase将数据扇出到不同的节点和Firebase建议的路径(如下例所示):

{
  "post-comments" : {
    "PostId1" : {
      "CommentID1" : {
        "author" : "User1",
        "text" : "Comment1!",
        "uid" : "UserId1"
      }
    }
  },
  "posts" : {
    "PostId1" : {
      "author" : "user1",
      "body" : "Firebase Mobile platform",
      "starCount" : 1,
      "stars" : {
        "UserId1" : true
      },
      "title" : "About firebase",
      "uid" : "UserId1"
    }

  },
  "user-posts" : {
    "UserId1" : {
      "PostId1" : {
        "author" : "user1",
        "body" : "Firebase Mobile platform",
        "starCount" : 1,
        "stars" : {
          "UserId1" : true
        },
        "title" : "About firebase",
        "uid" : "UserId1"
      }

    }
  },
  "users" : {
    "UserId1" : {
      "email" : "user1@gmail.com",
      "username" : "user1"
    }
  }
}

    通过多路径更新,我们可以原子地更新帖子的所有路径,但是如果我们想要删除上述类型的模式中的博客帖子,那么我们如何以原子方式进行操作呢?我猜,没有多路径删除.如果客户端在删除时丢失网络连接,则只删除少量路径!

    此外,如果有一个要求,例如当用户被删除所有已经加星标的帖子时,我们应该删除星标并取消该用户的帖子.这变得困难,因为没有直接跟踪用户已加星标的帖子.为此,我们需要散布帖子的主演,以及拥有节点用户明星.然后在删除时我们知道用户所做的所有活动,并在删除用户时对其进行操作.有没有更好的方法来处理这个?

    "user-stars":{
        "UserId1":{
            "PostID1":true  
        }
    }
    

在这两种情况下,原子地或一致地从多路径中删除数据的问题(全部或全部)似乎都不可用.

在这种情况下,唯一可用的选项是将删除命令放在Firebase队列中,只有在删除所有内容时才会解析队列中的任务.这将是最终一致的选择,但应该没问题.但这是需要服务器的昂贵选择.有没有更好的办法?



1> Frank van Pu..:

您可以通过将值写入路径来实现多路径删除null.

所以:

var updates = {
  "user-posts/UserId1/PostId1": null,
  "post-comments/PostId1": null,
  "posts/PostId1": null
}
ref.update(updates);

我之前已经回答过这个问题:Firebase - 批量删除子节点

在删除数据的文档中也明确提到了这一点:

您还可以通过将null指定为另一个写操作(如set()或update())的值来删除.您可以将此技术与update()一起使用,以在单个API调用中删除多个子项.


推荐阅读
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
author-avatar
real存在尹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有