2016-02-10 154 views
0

我從Firebase數據庫中檢索大量與會者參加活動 - 大約有4,000名與會者。每個表示爲大約500字節的JSON對象。如何將大型(2Mb)數據集存儲在持久本地存儲中?

檢索數據集後,我試圖將其存儲在持久本地存儲中。最初我嘗試使用標準DOM存儲(localStorage)使用Lawnchair.js。

我觀察到的是,在使用此方法插入數據集時,Chrome的內存使用量上升至2GB左右。另外,因爲保存到localStorage是同步的,所以這會阻止DOM,並且應用程序在30秒內無響應。

我認爲這可能是Lawnchair問題,所以我嘗試使用IndexedDB切換到localForage。這有2點很大的改進:

  1. localForage是異步的應用程序保持響應
  2. 內存使用情況完全不

但是爬,大約需​​要10分鐘寫數據索引分貝。前5分鐘,CPU坐落在30%左右,沒有任何東西寫入索引數據庫。最後5分鐘CPU停機並開始寫速度緩慢(可能爲10條記錄/秒)。

我的問題是這樣的: 這些行爲是否正常?如果是這樣,我如何將這些數據(大約2Mb)存儲在永久本地存儲中,而不會花費時間或消耗大量內存?

+0

有趣的是,我發現其他人談論localForage正在緩慢寫幾千記錄索引數據庫,例如https://github.com/mozilla/localForage/issues/301。 – quijames

+0

在嘗試使用localForage(https://github.com/thgreasi/localForage-setItems)批量插入此擴展並放入一些性能計數器後,我發現現在只需17秒即可「完成」插入所有4000條記錄。 但是,如果我檢查索引數據庫記錄計數,它在我的代碼完成時仍然顯示爲0。看到插入數量開始發生在25秒左右,需要幾分鐘才能完成。 – quijames

+0

爲什麼不直接使用indexedDB?你爲什麼使用中間層? – Josh

回答

0

如果有人感興趣,我已經將問題縮小到這樣一個事實,即使用localforage,我一直試圖插入數以千計的鍵值對,值是一個JSON對象。這需要很長時間。而是先調用JSON.stringify(obj)並將該字符串作爲值插入 - 速度提高了100倍以上。

enter image description here