在 SQL DB 中保存数百万条记录(从第 3 方 API 接收)的最佳方法?

问题描述 投票:0回答:1

我正在尝试从 DailyMed API 获取药物名称。 但该 API 仅支持每个请求的最大

100
结果,目前总元素计数超过 97k 条记录。

我不是在寻找代码,而是一个可以帮助我构建 API 来达到目的的设计:我需要每天从 DailyMed API 获取所有记录(Az 计时器触发器)并将它们更新到我的 SqlDb/Redis 缓存

(尚未实施). 我计划保持并行
for 循环中的 Get

 调用,并将数据附加到 
ConcurrentBagdictionary 中(根据诊断结果,我将选择 1),然后我必须更新 SQL表和带有最新记录的 Redis 缓存 - 为此,我计划将最新记录存储在临时数据库表中,然后编写一个 SP 来验证记录是否存在(添加或更新操作 - 无删除操作)或覆盖原始表使用新数据进行批量更新本身但是使用这种方法我觉得我过度设计了东西。此外,如果我覆盖现有表,这会引入新的复杂性,例如如果同时读取表会怎样,最重要的是,我不想丢失旧数据;如果第二天没有某些药物,我只想将其存档(将 isActive 设置为 false
)。

请让我知道这个问题陈述的更好方法/设计。

PS: 我使用 Redis,因为 Redis 可以轻松保存一百万条记录,并且有一个过期时间,这对我的用例很有帮助。我使用 SQL 作为后备机制

sql design-patterns redis
1个回答
0
投票
尽管有很多可能的解决方案,但我会从

开始

  • 创建两个数据库

    • dailymed_main
      
      
    • dailymed_temp
      
      
  • 创建一个 cron 作业,其中:

    1. populate()
      
      
        从 DailyMedApi 收集数据并将数据直接写入临时数据库
    2. delta()
      
      
        完成后将临时数据库与主数据库进行比较并采取所需的操作
        • 如果是新的,请插入
        • 如果删除,则更新 isActive 列
        • 如果行存在但数据不同,则更新
    3. synch()
      
      
        之后与主数据库同步
      • Redis
        
        
    4. delete()
      
      
        删除临时数据库
© www.soinside.com 2019 - 2024. All rights reserved.