2016-01-24 51 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

有趣的解決方案,我會研究它!謝謝 –

相關問題