tva
← Insights

使用 FastAPI 和 TimescaleDB 构建 Amazon 数据仓库

为什么选择 TimescaleDB

Amazon 数据本质上是时间序列数据:每天的销售数量、每次库存检查的数量水平、每次广告展示的点击成本。TimescaleDB 是建立在 PostgreSQL 之上的,为时间序列数据添加了超表和连续聚合。

选择 TimescaleDB 而非纯 PostgreSQL 的原因是其原生时间序列压缩:180 天的每小时库存快照使用 TimescaleDB 的压缩比原始 PostgreSQL 小约 10 倍。

API 层

FastAPI 处理 SP-API 数据的摄取:为每种数据类型(订单、库存、广告)设置端点,对写入操作进行批处理,以及处理 SP-API 的速率限制和退避逻辑。

数据摄取端点设计为幂等:提交相同的订单两次不会产生重复数据。这使重试逻辑变得简单,无需复杂的去重。

数据模型

核心超表:

CREATE TABLE sales (
  time TIMESTAMPTZ NOT NULL,
  asin TEXT,
  marketplace TEXT,
  quantity INTEGER,
  revenue NUMERIC(10,2),
  currency TEXT
);
SELECT create_hypertable('sales', 'time');

连续聚合处理日、周、月的预聚合,避免在每次查询时对原始数据进行全表扫描。

分析查询模式

最常用的查询模式是跨市场的趋势比较:特定 ASIN 在过去 90 天内在所有市场的销售趋势。TimescaleDB 的时间桶函数简化了这些查询:

SELECT time_bucket('1 day', time) as day,
       marketplace,
       SUM(quantity) as units_sold
FROM sales
WHERE asin = $1 AND time > NOW() - INTERVAL '90 days'
GROUP BY day, marketplace
ORDER BY day

相关洞见

相关文章