对数据集进行高级查询并在每次向该集添加新数据时自动 returns 相关更新结果的服务?

Service that does advanced queries on a data set, and automatically returns relevant updated results every time new data is added to the set?

我正在寻找一种云服务,可以对用户提交的大量投票进行高级统计计算,在"real time"。

在我们的应用程序中,用户可以针对各种主题提交不同类型的投票,例如选择最喜欢的、评分 1-5、说 yes/no 等。

我们还想向用户显示 "live" 统计数据,显示一个人的受欢迎程度等。这将由一个相当复杂的 SQL 生成,我们正在计算平均次数一个人被选为最喜欢的人,除以总票数和该人参加的比赛次数等。最近X场比赛的得分应高于所有比赛的总得分。这只是一个示例,还有其他几个 SQL 具有类似复杂性的查询。

我们所有可呈现的数据(包括计算的统计数据)均来自 Firestore 文档,投票将保存为 Firestore 文档。

理想情况下,Firebase 后端(函数、firestore 等)不需要了解查询逻辑。

我想要的是一种按需付费的云服务,它可以执行以下操作:

  1. 我定义了一些模式并为我们拥有的统计信息设置了我们需要的查询(15-20 个不同的 SQLs)。喜欢在 MySQL
  2. 中设置视图
  3. 每次投票时,我们都会将投票数据推送到此服务,该服务会将其存储在一行中。
  4. 然后,该服务应根据其对已定义查询的了解以及推送的投票数据的内容,确定哪些统计信息受新添加的行影响,并重新计算这些统计信息。特定的投票类型会影响一项或多项统计数据。
  5. 每次重新计算统计数据时,结果都应自动推送回我们的 Firebase 后端(例如通过调用命中云功能的 HTTPS 端点)- 这样我们就可以更新相关的 Firestore 文档。
  6. 该服务应该能够限制计算,例如尽管每秒对同一主题进行多次投票,但每 1 分钟才重新生成新的统计信息。

市面上有这样的产品吗?或者它可以通过结合可用的云服务来构建吗?如果我自己搜索一下,这种产品的官方术语是什么?

我知道我自己可以构建这样的解决方案,并且 运行 它在云托管的数据库服务器上,它可以随着我们的需求增长而扩展 - 但我相信我不是第一个开发人员需要这个,所以我希望有人在我之前解决了它:)

您可以利用 Google 云平台上可用的现有云服务。 Google BigQuery, Google Cloud Firestore, Google App Engine (CRON Jobs), Google Cloud Tasks

服务可用于解决上述问题:

1) Google BigQuery :您可以在此处为要运行 SQL 查询的数据定义架构。 BigQuery 支持标准和旧版 SQL 查询。

2) 每个投票都可以使用其流式插入服务推送到定义的 BigQuery tables。

3) 每次推送的投票都可以触发重新计算服务,该服务通过执行定义的 SQL 查询来计算统计数据,并且查询结果可以作为文档存储在 Google Cloud Firestore 中的集合中。

4) Google Cloud Firestore:您可以在此处存储用户的实时统计信息。这是一个实时数据库,因此您将能够为统计数据的修改配置侦听器,并在重新计算统计数据后立即显示修改。

5) 在插入每张选票的同一服务中,在另一个 table 中创建一个带有 "syncId" 的新记录。这个想法是将在特定时间间隔内投出的大量选票分组到其相应的 syncId。 syncId 可以以时间戳作为后缀。根据您的要求,可以设置特定的时间间隔,以便使用 CRON 作业服务触发重新计算,该服务会在该时间间隔内调用重新计算服务。一旦与特定 syncId 相关的重新计算完成,对应于 syncId 的记录应标记为已完成。

我们正在利用上述技术在 Google Cloud Platform 上构建 Web 应用程序,其中输入记录在 Google Firestore 上,然后 stream-inserted 到 Google大查询。存储在 BigQuery 中的数据在每次更新 30 秒后使用 SQL 查询进行查询,查询结果存储在 Google Cloud Firestore 中以服务仪表板,这些仪表板使用为集合配置的侦听器自动更新,其中仪表板信息已存储。