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

当数据集变大时,如何减轻firebaseworker中的长启动时间

如何解决《当数据集变大时,如何减轻firebaseworker中的长启动时间》经验,为你挑选了1个好方法。

Firebase有一个有趣的功能/滋扰,当您收听数据引用时,您将获得所有已添加到该引用的数据.因此,例如,当您收听'child_added'时,您将获得从一开始就添加到该ref的所有孩子的重播.我们正在编写一个评论系统,其数据集看起来像这样:

/comments
/sites
/sites/articles
/users

网站有很多文章和文章有很多评论,用户有很多评论.

我们希望能够跟踪用户所做的所有评论,因此我们认为将评论放在单独的ref中是明智的,而不是根据它们所属的文章对它们进行分区.我们有一个后端监听器,它需要在新的评论到达时做一些事情(增加他们的子计数,调整用户的统计数据等).我担心的是,经过一段时间后,如果它必须处理所有评论的重播,那么这个听众需要很长时间才能启动.

我想过可能只在文章中存储注释并在每个注释中存储对每个注释的siteId/articleId/commentId的引用,这样我们仍然可以找到给定用户的所有注释,但这会使后端变得复杂,因为它可能需要每个站点甚至每篇文章都有一个单独的监听器,这可能使管理这么多听众变得困难.

想象一下,如果这些文章中的一篇文章位于人流量很大的网站上,每篇文章都有成千上万的文章和数千条评论.缩放答案是否以某种方式跟踪每个站点的流量级别,并以分配给不同工作进程的方式对它们进行设置和分区?那么启动时间的问题以及每次加载工作人员时重播所有数据需要多长时间?



1> Kato..:

除了弗兰克的答案之外,还有其他几种可能性.

使用队列策略

由于工作人员真的希望处理一次性事件,然后给他们一次性事件,他们可以从队列中提取并在完成处理后删除.这样可以优雅地解决多工作方案,并确保在服务器脱机时不会遗漏任何内容

利用时间戳来减少积压

在工作重启/启动期间避免积压的简单策略是为所有事件添加时间戳,然后执行以下操作:

var startTime = Date.now() - 3600 // an hour ago
pathRef.orderByChild('timestamp').startAt( startTime );

跟踪最后处理的ID

这仅适用于push id,因为未按键自然排序的格式可能会在将来的某个时候出现故障.

处理记录时,让您的工作人员通过将该值写入Firebase来跟踪其添加的最后一条记录.然后可以orderByKey().startAt( lastKeyProcessed )用来避免积压.令人讨厌的是,我们不得不丢弃第一把钥匙.但是,这是一种有效的查询,不会为索引花费数据存储,并且可以快速实现.


推荐阅读
  • dataguard日志传输模式解析_SOFAJRaft 日志复制pipeline 实现剖析 | SOFAJRaft 实现原理
    SOFAStack(ScalableOpenFinancialArchitectureStack)是蚂蚁金服自主研发的金融级分布式架构,包 ... [详细]
  • kafka教程基本概念
    kafka教程基本概念 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • 玩转直播系列之消息模块演进(3)
    一、背景即时消息(IM)系统是直播系统重要的组成部分,一个稳定的,有容错的,灵活的,支持高并发的消息模块是影响直播系统用户体验的重要因素。IM长连接服务在直播系统有发挥着举足轻重的 ... [详细]
  • ☞░前往老猿Python博客https:blog.csdn.netLaoYuanPython░一、引言在写该文之前,老猿就图像的一些运算已经单独边学边发了࿰ ... [详细]
  • Hbase中Insert和Update操作没有明显的差别。如果误操作,是否可以恢复数据?方法:通过timeStamp找回数据。但是&#x ... [详细]
  • XEON® Scalable如何为虚拟化挑选合适的CPU
    Intel于去年7月发布了XEON的新一代CPU:XEON®processorScalablefamily(以下简称为Skylake-SP),现在已经在项目中,看到了新的Skyla ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了当应用程序处于后台状态时,FCM多次推送通知无法正常工作相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
author-avatar
用户19910071
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有