2017-09-12 21 views
2

我需要從服務器中檢索我的視圖(JS中的)大量數據。稍後存儲較大的JSON管道請求

JSON的是約30 炭化長度。這是有點兒看起來像這樣(只是一個例子):

[{x:1000,y:1000,t:1505250440},{x:999,y:1000,t:1505250441},{x:998,y:1000,t:1505250442}......] 

的JSON是每小時通過我與一個cron數據庫從表中提取數據更新。

我應該存儲整個JSON:

  1. 在數據庫中(作爲行 - LONG_TEXT),將通過SQL請求,並在文件中使用PHP成爲我的看法
  2. 直接說我會直接從JS
  3. 的視圖請求或者我可以用任何其他方式壓縮JSON文本?

什麼是最有效的方法是什麼?它不是必需的,我將其存儲在JSON,我可以像一個基本的壓縮更簡單的存儲它:

1000.1000.1505250440-999.999.1505250441-.... 

回答

0

如果你想保存查詢的結果,只得到從腳本整個數據集,從性能角度看,將它保存在文件中似乎更有效率。

而且,正如你所提到的,將它存儲在JSON中是多餘的。 CSV格式不會強制您像JSON密鑰那樣爲每行存儲元數據,因此需要的空間較少。

此外,您還可以壓縮的結果,但decompressin訪問數據可能是低效率的。這取決於你需要多長時間來進行數據訪問,它應該是如何快速

+0

可以送花兒給人其存儲爲JSON編碼CSV其中每行實際上是一個JSON數組,但結構是一樣的。這可能會導致無法解析的CSV分析問題。 – tadman

0

有趣的問題。這實際上取決於瓶頸的位置,我們不知道你對這些(這些)數據做了什麼。我假設你使用cron來收集這些數據,因爲當客戶端請求時在服務器上生成它會花費太長的時間。我會說A和B非常相似,它們在磁盤上的存儲量相同,而B只是稍微快一點。

你是C的榜樣,不會給你買太多的東西。如果你知道這些將會是32位整數,那麼存儲它們將肯定會將它們存儲爲字符串。對於64位,它將取決於字符串的平均長度。無論哪種方式gzip可能是你的朋友。

您可能還需要考慮緩存,而不是存儲,如果你不需要這個長期的。

+0

那麼我最大的問題是加載時間。我將嘗試REDIS作爲緩存系統,但問題依然存在:我應該將整個json儲存在緩存的一個密鑰中嗎? – Owow

+0

如果您打算緩存整個JSON字符串,我想看看阿帕奇/ nginx的緩存,另外考慮在響應緩存頭。如果數據是靜態的,爲什麼要一路回到數據庫?我也會考慮啓動緩存。 – pucky124

0

我相信第三選項將是最好的(如果你想最小字節大小),並將其與第一種選擇搭配存儲在數據庫行。個人而言,如果數據將在稍後的日期用於數據庫查詢,那麼稱爲pipelining(將大數據存儲在臨時位置,直到存在許多可用資源的時間爲止)。

爲了製作一個基本的流水線,將數據存儲在一個類似data.pipe.txt的文本文件中,以原始文本將所有數據推送到它,或者將該JSON轉換爲CSV以使其更小。

如果您主要使用PHP來管理和操作數據,請使用更友好的PHP格式,但支持JSON,但主要針對JavaScript,而PHP則更適合PHP管理,循環每行,您明白我的意思。

不過既然你說的數據是從cron作業拉,你最好做的大操縱每個24小時(如果這是可行的)和管道中的每一小時臨時存儲的數據。

這個問題問得有點寬的態度,我覺得談論管道。

+0

我運行一個cron每隔一小時,從我的數據庫到JSON轉儲數據和存儲在某個地方。我要去嘗試你的觀點,謝謝:) – Owow

+0

哦,我收了回去@owow,這給了我裏面的蝴蝶:) – Jek