2016-01-24 47 views
1

我正在研究一个严重依赖于来自外部API的数据的应用程序。我需要将其存储在数据库中以执行一些搜索等。数据更改频繁且必须每天“同步”。所以我正在寻找一种有效的方法来从API中提取新数据并使用新的,更新和删除的实体更新数据库。Symfony/Doctrine - 使用外部数据源保持数据库的最新状态

但是,我只是遇到了关于查询每个实体的差异以确定是否执行更新或插入的建议,这对我来说似乎效率很低。或者截断所有的数据,然后插入。但是,是否有任何现有的(更有效的)工具,技术或策略,还是这种方式?

在此先感谢!

回答

2

您可以为每个项目生成散列,并在下次导入时对其进行比较。你需要两样东西为每一行:

  1. 一个唯一的ID
  2. 数据的哈希值,可以改变

例如,如果您收到这样的条目:

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

您生成散列sha1($row['title'].'|'.$row['description'])并且在下一次导入过程中,您只需将旧哈希与新哈希进行比较。您必须遵守以下规则:

  1. 如果行的ID不存在于数据库中:如果你的数据库中存在与该行的ID从数据库中的散列不插入
  2. UPDATE
  3. 如果从您的数据库中的ID是从新鲜的数据丢失:DELETE

PS:你可以用之日起代替哈希如果外部API给你比你从该行生成一个同访问每行的最后修改时间。

+0

有趣的解决方案,我会研究它!谢谢 –

相关问题