定期缓存和更新复杂数据

Cache and update regularly complex data

让我们用背景加星标。我有一个 api 端点,我必须每 15 分钟查询一次,并且 return 是复杂的数据。不幸的是,此端点不提供确切更改内容的信息。所以它需要我比较我在 db 中的数据并比较所有内容,然后执行更新、添加或删除。这很无聊...

我想到我可以简单地从某些表中删除所有数据并从头开始构建所有内容...但我还必须 return 将此缓存数据发送给我的客户。因此,在我的客户发出某些请求期间,可能会出现数据库为空的情况,因为它将是“refreshing/rebulding”。这不可能发生,因为我必须 return 做点什么

所以我想到了

  1. 锁定某些数据库表,这样客户端将不得不等待“刷新数据库”

  1. CQRS https://martinfowler.com/bliki/CQRS.html

你有什么解决问题的建议吗?

听起来您正在使用关系数据库,因此我将尝试使用数据库术语概述解决方案。然而,这个想法比这更普遍。一般来说,它类似于 Blue-Green deployment.

有两个数据table(或两个数据库);一个是活跃的,一个是不活跃的。

当软件开始更新过程时,它可以擦除不活动的 table 并将新数据写入其中。在此过程中,系统会继续提供来自活动 table.

的数据

数据更新完全完成后,系统可以开始提供之前不活动的数据 table。换句话说,不活跃的 table 变成活跃的 table,反之亦然。