【发布时间】:2019-04-18 04:20:16
【问题描述】:
我有以下场景,我想知道它是否可能/可行。如果这被认为是一个过于“宽泛”的问题,我深表歉意,但我认为 SO 是提出这个问题的最佳场所。
假设我有一个网站,我想向最终用户显示一个图表。出于本示例的目的,假设我们要向他们显示过去一小时内的“每个类别的销售额”。数据将显示在图表中,运行查询的 SQL 可能是这样的:
SELECT SUM(revenue) FROM sales
WHERE timestamp > NOW() - INTERVAL 1 HOUR
GROUP BY category
据我所知,为最终用户更新数据的一般方法有两种:
- 以一定的时间间隔执行某种轮询(或类似技术)以从查询中重新获取数据。但是,这可能会变得非常昂贵,具体取决于查询的复杂性/持续时间以及同时连接的人数。
- 第二种方法是将所有数据存储在内存中并将更新直接推送到该内存存储(可以是客户端或服务器端,我们可以随时向最终用户发送 ws 请求有数据更新。这方面的一个例子是使用 https://github.com/jpmorganchase/perspective 之类的东西。
然后我的问题是,当数据太大而无法存储在内存中时,是否有可能进行实时数据更新(我在示例 2 中描述的情况)。我认为答案是“不”,但也许我错过了一些方法来做到这一点。例如,假设我在 BigQuery 中存储了 1TB 的数据,并且我正在通过购买新产品对其进行流式更新——有没有一种方法可以将更新推送到最终客户端,而不必每次都重新运行查询想要获得更新?是否有任何其他技术可以用于这种情况/有用?
同样,我不认为这是可能的,但我想看看在查询的数据集上尽可能近实时地向终端客户端显示什么是可能的。
【问题讨论】:
-
嗨 David542,也许像 Google PubSub 这样的东西可以工作? IE。每次购买新产品时,包含购买相关信息的“消息”通过消息发布客户端发布,与正在更新的数据库并行。消息是通过订阅者接收的,订阅者处理它们并将来自最后(例如)小时的消息的信息编译成有用且可在图表上呈现的格式。我对数据库一无所知,仅供参考!更多信息:cloud.google.com/pubsub/docs/overview
-
@Paul -- 对,我们目前正在使用它,但我的问题是如何用它更新最终用户的图表?
-
webpush - tools.ietf.org/html/draft-ietf-webpush-protocol-10 怎么样?您可以在数据库中完成一个触发器,该触发器将填充一个您将拥有客户端订阅的表,这会将更改推送到客户端。
-
@tukan 这将如何与 bigquery 或其他数据库这样的东西一起工作?
-
Cloud Firestore 怎么样?您已经在使用 pub/sub,因此您可以创建一个云函数来处理来自 pub/sub 的消息以更新您的 Cloud Firestore 数据库。
标签: websocket google-cloud-platform google-bigquery analytics real-time