我正在为我的公司开展一个细分项目,我们必须创建一个管道来从我们的应用用户那里收集数据,当他们适合细分时,应用将接收该信息并对其进行处理(而不是在我的范围)。因此,目前,客户端连接并验证一个端点,该端点允许其客户端将 JSON 数据发送到 Elasticsearch 集群(应用程序已启动、级别已完成等)。然后我使用 Azure 函数每 5 分钟获取一次实时数据并将其存储在 Azure Blob 存储中,然后创建一个队列,让 Snowflake 读取和摄取 JSON 文件。然后,我们将使用 Snowflake 为每个细分市场运行一项任务(由分析师或高管决定),数据将输出到如下表所示:
帐户 ID | 游戏 | SegmentID | 创建时间 | 已删除 |
---|---|---|---|---|
123456789 | 第一场 | 1 | 2021-04-20 | 2021-04-21 |
123456789 | 第一场 | 2 | 2021-04-20 | |
123456789 | 第一场 | 3 | 2021-04-20 |
SegmentID 可以代表什么
SegmentID | 细分类型 | 段描述 |
---|---|---|
1 | 连续 5 天 | 用户连续玩了 5 天 |
2 | 连续 10 天 | 用户连续玩了 10 天 |
3 | 连续 15 天 | 用户连续玩了 15 天 |
在管道的下一步中,用户通过身份验证所使用的相同 API 应在游戏启动时发布请求以获取用户匹配的所有段。然后,开发团队将决定会话的地点、时间以及如何使用信息来个性化内容。类似的东西:
select
SegmentID
from
SegmentTable
where
AccountID='{AccountID the App authenticated with}' and
Game='{Game the App authenticated with}' and
DeletedAt is null
回复:
SegmentID |
---|
2 |
3 |
序列化:
{"SegmentID": [2,3]}
我们预计每天有大约 300K-500K 的用户。我的问题是,将这些信息从 Snowflake 获取回客户端的最有效和最具成本效益的方法是什么,以便在查询相同端点时如此数量的用户不会出现问题,并且成本不会很高。
答案 0 :(得分:0)
好的,有点解决方法,但我在 Snowflake(使用 Azure Functions)上创建了一个外部函数,它在本地 MongoDB 集群中更新数据。因此 API 连接到 MongoDB 实例,该实例可以处理大量并发连接,并且由于它位于本地服务器上,因此非常便宜。唯一的成本是从 Snowflake 到 MongoDB 的数据传输以及在 Azure Functions 上运行应用服务计划(无法使用基于消费的方式将数据发送到我们需要创建 VNET、NAT 网关和静态出站的内部服务器Azure 中的 IP 地址)以及我必须在 Azure 中创建的 API 管理服务。
那么它是如何工作的呢?对于 Snowflake 中的每个存储过程,最后我将收集已更改的段(新行或 DELETED_AT 不为空)并触发使用 pymongo 客户端在 MongoDB 中更新数据的外部函数。