2013-10-25 29 views
1

我們的網站爲我們的客戶提供各種數據服務;其中之一是計量數據。有些儀表每15分鐘記錄一次信息,有些每分鐘記錄一次。這些數據被髮送到我們的SQL數據庫。處理大型數據集圖形和顯示的最佳方式

所有這些數據都通過圖表(生成的服務器端通過PHP和JPG圖形)顯示,每個日誌條目在可摺疊表(jQuery 1.10.2)中顯示爲一行。

當客戶端想要觀看的數據,他們選擇日期範圍和計他們想觀看。如果他們想查看每分鐘記錄的記錄的最後3天,那麼記錄速度非常快。如果他們想要查看其中的2個,則需要大約15-30秒才能加載。真正的問題出現在他們想要查看數月的數據時;特別是超過1個規格。這可能需要15-20分鐘才能加載,瀏覽器會反覆詢問是否要停止填充可摺疊表格行(jquery)。

顯然,這是一個問題,因爲客戶希望有一個比較快的響應(1-5分鐘最大值)。理想情況下,我們也希望能夠一次抽出幾個月的測量數據。我們現在唯一可以做到的方式是每週提取兩週數據並手動編譯總數。

僅供參考:如果我想爲我們的一個分鐘日誌記錄儀中的兩個記錄一個月的數據,那麼會有86,400行通過jQuery添加到可摺疊表格中。該頁面大約需要。 5分鐘即可加載,在此期間瀏覽器非常慢。

我的問題是:什麼是拉/圖形的最佳方式/填充使用基於PHP的服務器(Symfony的1.4框架)和JavaScript的數據?

我們應該考慮升級我們的分配處理能力/ RAM(我們GoDaddy代管)?有沒有更快的方式來填充collapsibles比jquery?我們所有的calculatoins都在服務器端完成。我們是否應該提取原始數據並讓客戶端進行數據處理?我們應該在客戶端和服務器之間拆分數據處理嗎?

下面是網頁的截圖。它修剪,不顯示更多的客戶敏感信息:

enter image description here

+1

這可能不適用於您,因爲您還需要顯示圖表。然而,每當我需要拉大型數據集(數百萬行)時,我所做的一件事情就是不會將整個事情傳遞給客戶端。只傳遞前200個。然後給用戶提供更多數據請求的能力。例如,像無限滾動一樣。如果你有興趣,我可以給出更詳細的答案。 – Pompey

+0

如果需要在服務器上完成處理,則可以預處理和緩存數據。將預先緩存的數據(array_merge也許)聯合在一起很容易,速度可能要快很多。除此之外,你可以加載數據塊。在向下滾動時,通過ajax分頁數據和/或加載。 –

+0

84'000個數據點對於閱讀數據的人來說幾乎難以管理?您是否考慮過在繪圖之前對數據進行彙總,以使數據集繪製得更小? – Twelfth

回答

1

在回答我的評論。

由於需要整個數據集只在服務器端(你在服務器上創建的圖表),這意味着你實際上並不需要將整個數據集到客戶端。

反而發送一小部分給客戶端。我們說前200個結果。然後,您可以繼續將結果集的其餘部分緩存到JSON文件(lite數據庫,無論您想要什麼)。然後創建一個用戶可以請求更多數據的界面。無限滾動很好,但有它自己的問題。也許只是一個說載入更多數據的按鈕。正如人們曾經說過一次超過桌子上數百個數據點是瘋狂的,因爲人們無論如何都不會看它。然後,當他們點擊按鈕以獲取更多數據時,您可以使用正確的參數向服務器發送一個AJAX請求,以獲取您想要的數據。

例如他們第一次點擊getMoreData()你想獲得的200個數據點。所以你發送getMoreData(start = 200,length = 200)。您的服務器選取AJAX請求,並在JSON文件或lite數據庫中找到正確的數據,無論您在哪裏緩存結果。用戶可以繼續請求更多的數據(確保您更新了開始參數),並且您只返回一小部分數據。用戶甚至沒有意識到他們沒有在他們面前的整個數據集,因爲它看起來像他們一樣。

一個複雜的是排序和搜索。如果你想實現這些,那麼你需要確保你到服務器端並對緩存的結果進行排序/搜索。

所以,基本上你有一個系統,你可以在服務器端創建整個圖表,這不應該花很長時間。花費很長時間的是將整個數據集加載到客戶端。所以你把它分成小塊。您甚至可以使用此方法輕鬆創建分頁和此類。

+0

正是我所需要的。謝謝! – user2920960

相關問題