我在React Native Expo应用程序中使用Firebase作为身份验证和数据库平台。我还没有决定是使用实时数据库还是Firestore数据库。
我需要对从用户那里收集的日常数据进行统计分析,这些数据存储在数据库中。也就是说,用户输入他们每天的蛋白质摄入量,根据它我想计算他们的周平均值,预期月平均值,如果蛋白质摄入量过低,提供食物类型的建议等等。
在我的具体情况下,实现想要的结果的最佳方法是什么?
对于如何做到这一点,我真的很陌生,也步入了未知的领域。我读到Firebase Analytics生成了关于应用程序使用情况、无故障用户数量等的不同基本分析。但它能对自定义事件进行分析吗?我可以为Firebase分析创建一个自定义事件来跟踪数据库中的某个节点,并从中输出分析吗?当然,如果是的话,它与React Native Expo合作吗?还是我需要脱离Expo?此外,我读到Firebase Analytics可以与Google BigQuery相结合。这会是我案件的替代方案吗?
是否有其他方法可以对我存储在Firebase数据库中的数据进行此类数据分析?例如,导出数据并使用Python和SciKit Learn?
无论你有什么意见或建议,如果你能分享,我将不胜感激!
你并不孤单——许多在GCP上构建web应用程序的人都有这个问题,而且没有单一的答案。
我不太熟悉Firebase Analytics,但可以回答Firestore和您的自定义分析(例如每周平均蛋白质消耗量)的问题
首先要指出的是,与其他NoSQL数据库不同,Firestore只是存储。您无法像使用MongoDB那样实时执行聚合,因此必须在其他地方进行计算。
在这种情况下,GCP建议的最佳实践实际上是将Firestore数据定期导出到BQ(BigQuery)中,同时您可以在那里运行分析计算。当用户输入一些数据时,您也可以将其发送到Pub/Sub,并使用GCP Dataflow的流式模板之一将数据流式传输到BQ,并几乎实时地处理所有数据。
然而,问题是:虽然这个解决方案可以为您提供实时性,并且非常可扩展,但它的成本很快就会变高,如果您更习惯于Python而不是SQL来运行分析,那么这可能是一条陡峭的学习曲线。这是我在较小的网络应用程序中使用的一种替代方案,它可以很好地扩展<10万用户和成本<GCP目前的定价为每月20英镑:
- 编写一个Python脚本,从Firestore获取数据(使用Firestore Python SDK),生成所需的分析,并将结果写回Firestore集合
- 使用Flask或Django为该函数创建一个端点
- 在Cloud Run上部署该服务器应用程序,防止未经身份验证的调用(您只能从GCP中调用它)-请参阅本文的步骤1和2。如果你对此更满意,你也可以将Python脚本部署到GCP的Vertex AI或托管的Jupyter笔记本电脑上
- 使用Cloud Scheduler每x分钟调用一次该函数-有关身份验证,请参阅以下文档
- 让您的React应用程序查询";分析结果";集合以获取结果
我的解决方案是一个基于FlutterWeb的Dashboard,它像Regular Flutter IOS/Android应用程序一样实时显示相关数据,以及一些聚合数据。
聚合数据是使用数据库中一些基于nodejs的触发器编译的,这些触发器可以进行任何分析提升,因此也是接近实时的。如果你研究定价,你会发现,函数调用非常便宜,当然,除非你碰巧做了一个"desphew":)
我想出了一个很棒的解决方案。
我使用了内置的firebase BigQuery插件。然后我在bigquery之上使用了Cube.js(部署在GCP上-在docker上运行云)。
Cube.js让一切都变得如此简单。您确实需要进行手动查询它试图进行优化查询。最重要的是,它使用缓存,这样你就不会在GCP上收到大笔账单。我认为这是我能找到的最好的解决方案。这是无限可扩展和完全实时的。
此外,如果你是一家小型初创公司,那么它大多是免费的,对云运行和BigQuery有GCP免费限制。
注:-这与cubejs没有任何关系。