Symfony / Doctrine - 使用外部数据源保持数据库最新

时间:2016-01-24 01:05:01

标签: php mysql symfony doctrine-orm

我正在处理一个严重依赖外部API数据的应用程序。我需要将它存储在数据库中以执行一些搜索等。数据经常变化,并且必须同步"日常。因此,我正在寻找一种有效的方法来从API中提取新数据并使用新的,更新的和已删除的实体更新数据库。

但是,我只会遇到有关查询每个实体的差异以确定是进行更新还是插入的建议,这对我来说效率非常低。或截断所有数据,只是插入。但是,是否有任何现有的(更有效的)工具,技术或策略,或者它是要走的路?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以为每个项目生成哈希值,并在下次导入时对其进行比较。每行需要两件事:

  1. 唯一ID
  2. 可以更改的数据的哈希值
  3. 例如,如果你收到这样的条目:

    {
       "id": 42,
       "title": "something",
       "description": "the description of this item"
    }
    

    您生成哈希sha1($row['title'].'|'.$row['description']),在下一次导入期间,您所要做的就是将旧哈希与新哈希进行比较。您必须遵循以下规则:

    1. 如果您的数据库中不存在该行的ID:INSERT
    2. 如果您的数据库中存在该行的ID,并且数据库中的哈希值与您从该行生成的哈希值不同:UPDATE
    3. 如果新数据中缺少数据库中的ID:DELETE
    4. Ps:您可以使用日期替换哈希,如果外部API允许您访问每行的最后修改时间。