2014-11-03 43 views
0

我的問題涉及什麼是最有效的方式來將整個JSON文檔存儲在數據庫表中並定期刷新它。使用數據庫作爲緩存。重建與更新

本質上,我通過cron作業每15分鐘調用一次Google Analytics API來提取有關我的網站的數據。我將這些信息轉儲到sql表中,以便我的前端應用程序可以搜索,排序和使用它。這個JSON是分頁的,每次只有5000行。我會存儲多達100,000個。

我想要做的是優化我重建表的方式。最天真的方法是截斷表格並插入JSON新鮮的每一行。我有感覺這是一個糟糕的做法,但也許我低估了SQL。

我也可以根據需要更新每個現有行並添加新行。然而,我正在努力如何刪除可能不在最新的JSON對象中的舊行。

或者我錯過了一個更明顯的解決方案。

回答

1

這個問題的真正答案取決於最好的方法。由於我對數據不熟悉,我不能給你一個簡單的答案,但一些指導方針。

首先,對於SQL服務器來說,100000行是沒有用的。因此截斷表並插入新值可能實際上是可行的,但是如果這些數據要大幅增長,這可能不是一個可以很好地擴展的解決方案。這種方法的主要缺點是在一段時間內表格將是空的,這可能是一些用戶的問題。

總結這種方法的:

  1. 簡單,快速的代碼和維護。
  2. 截斷將總是很快,但插入會隨着卷的增加而減慢。
  3. 數據將在截斷和插入週期期間脫機。

插入和更新,因爲我們沿着被稱爲Upserts/Merges。這種方法將涉及更多的工作,但數據將始終在線。您面臨的一個難題是使用JSON數據和SQL數據(發現本機JSON數據集與SQL表相比存在差異),但這樣做效果不佳且麻煩。

所以我會爲JSON創建一個臨時表。該表格將是最終生產表格的精確副本。然後,我會使用LEFT和RIGHT JOINS插入新數據並刪除已刪除的數據。您也可以爲每一行創建一個散列,並比較這些散列以確定已更改的行,然後僅更新纔是必需的。所有這些轉換都可以在一個簡單的SQL腳本中進行處理。是的,你低估了SQL有點...

總結這種方法的:

  1. 更復雜的代碼,但並不難代碼的簡單連接和散列比較會做的伎倆。
  2. 只插入新值,更新更改的值並刪除舊值。縮放這個解決方案時,它最終將勝過截斷,插入週期。
  3. 數據始終保持在線狀態。

如果您需要澄清此問題,請提出。