2014-02-08 41 views
2

我正在從Salesforce中提取JSON數據。我可以有大約10 000個記錄,但從來沒有更多。爲了防止Api限制並且必須爲每個請求打Salesforce,我想我可以每小時查詢一次數據,然後將其存儲在內存中。顯然這會更快,並且更不容易出錯。使用節點在內存中處理大型JSON數據集

一個JSON對象將有大約10個屬性,也許還有一個嵌套的JSON對象有兩個或三個屬性。

我正在使用類似於以下的方法來查詢記錄。

getUniqueProperty: function (data, property) { 
    return _.chain(data) 
     .sortBy(function(item) { return item[property]; }) 
     .pluck(property) 
     .uniq() 
     .value(); 
} 

我的問題是

  • 會的後果是由數據存儲到內存中,並在內存中的數據的工作是什麼?我顯然不想通過對數據進行大量過濾來阻止服務器。

  • 我從來沒有使用過redis,但會像緩存db的幫助?

  • 最好是每隔一小時查詢數據,並將JSON響應存儲爲Mongo等。然後,我會盡我所有反對Mongo而不是內存?每查詢一次Salesforce,我只需刷新數據庫並重新插入數據。

+0

假設您的salesforce數據在該小時內正在更新,則所有請求都會過期,直到下一次更新。 – Andy

+0

一點也不擔心數據過期。它可能已經過時了。它可能只會被更新,無論如何都需要每隔幾個小時才能完成。 – TYRONEMICHAEL

回答

1

在存儲器中存儲你的數據有幾個缺點:

  • 不可擴展 - 當你決定使用多個進程,每個進程將需要相同的API請求;
  • 脆弱 - 如果您的進程崩潰,您將丟失數據。

此外,處理大量數據可能會阻止比您想要的更長的時間。

解決方案: - 使用外部存儲!它可以是redis,也可以是MongoDB或RDBMS; - 更新獨立進程中的數據,使用cron觸發; - 不要刪除整個數據庫:在此之後有人可能會提出請求(如果您的存儲不支持事務),請更新記錄。

+0

我簡要地看了一下redis。因爲它是一個關鍵的價值商店,所以對數據進行富查詢不是不可能的嗎?舉例來說,我將無法查詢JSON數據,比如說,vehicleMake是豐田?我想過更新記錄,但事情變得非常複雜。我只需要與應用程序相關的數據,因爲所有數據都存儲在Salesforce上。如果我丟失了數據,我只需查詢Salesforce即可重新獲取相關數據並處理相關數據。我能否爲複雜的查詢生成子進程? – TYRONEMICHAEL

+0

@TyroneMichael如果您需要複雜的查詢MongoDB或RDBMS是一個不錯的選擇。如果您爲每個查詢生成一個子項,那麼您必須處理每次通過IPC傳遞數據或從salesforce請求數據的開銷。如果你有一個惡魔查詢過程,它將基本上重新創建數據庫管理系統。 – vkurchatkin

相關問題