首页 > 解决方案 > 完整 api 调用的增量负载

问题描述

我有一个 API,我需要将注册数据从其中获取并每天汇总到我的数据库中。每次调用 API 时,我都会获得数据的完整副本。有时旧帐户会被删除,因此历史数据会发生变化。

这是来自 API 的数据的样子:

来自api的基本数据

我想像这样聚合它,以查看每日帐户创建和激活:

汇总数据

现在,我可以做的是每天导入完整数据,然后像这样聚合:

SELECT
Current_date() as snapshot_date,
SUM(CASE WHEN accountCreateOn = current_date() THEN 1  ELSE 0 END) as accountCreateOn,
SUM(CASE WHEN accountActivateOn = current_date() THEN 1  ELSE 0 END) as accountActivateOn
FROM full_data

但这似乎不是很抗故障。如果管道连续几天出现故障,会发生什么?解决此类问题的正确方法是什么?

标签: sqldatabase-designetl

解决方案


最简单和最容错的方法是完整地存储您获得的数据,并且尽可能详细地存储它们。您无法获得任何更好的信息,并且留下信息(包括汇总信息)总是会带来危险,即您有一天会想要回答有关那些本可以在完整数据集上回答但无法回答的数据的问题回答减少的一个。

离开这条路的唯一原因可能是数据集太大以至于无法存储和处理它们。对于在现代硬件上运行的现代 DBMS 系统,您不太可能遇到该问题。因此,我将创建我对我的业务所期望的最大规模的综合测试数据,例如我梦想的每年帐户激活的 10 倍。如果数据库可以处理这个问题,这意味着你不用担心一个问题。


推荐阅读