2017-02-18 29 views
0

(我希望這個問題不堅持己見,因爲我確實感到有一個正確和錯誤的答案,因此,如果它只是告訴我,我會刪除它)架構:分組客戶端,或從服務器拉多個分組數據?

我有一個MySQL數據庫中的數據一個包含幾個不同值的字段,但需要根據這些值進行分組(我知道這些值是什麼)。所以我的問題是:

  • 是更好地從服務器上把所有的數據在一次(因爲將使用的所有數據),然後在通過JS在客戶端的數據到組進行排序基於你想要的領域。

  • 或者向服務器發出多個小的請求,只獲取與單個字段匹配的數據,然後直接在程序中使用該數據會更好。

我認爲,主要的考慮是,以儘可能少的人花時間在服務器上,因爲客戶端的工作相比,服務器端的效率要高得多(更快,只有一個用戶)(互聯網連接是較慢,並且有更多的用戶)。

但是,更快,更好的解決方案:許多小型服務器請求或一個大型服務器請求。

所以例如:

Name:  Group 

    Alpha:  Top 
    Bravo:  Top 
    Delta:  Bottom 
    Charlie: Top 
    Echo:  Bottom 
    Fox:  Bottom 
    Gama:  Bottom 
    Hotel:  Top 
    India:  Top 
    Juliet: Bottom 

是更好地從服務器獲取的所有數據與一個查詢($sql = "Select * FROM table";),然後用客戶端的功能,對數據進行分組(GroupBy(data,groups){};

或者做兩個數據庫查詢($sql = "Select * FROM database where group = $group";),然後只使用已經分組的數據?

一個真實世界的例子就像亞馬遜,在那裏每天都會有用戶查詢的分配,但是他們可能正在尋找鞋子,所以你一次就得到鞋子的數據,價格和描述通過API請求,然後將它分組到服務器端並將其放入列中,或者先獲取所有大小,然後再着色,然後查看並將每個請求插入到列中?

+0

如果數據很小,請不要過多關注它。如果您正確編制索引表,排序和分組相對便宜。 – Lukabot

+0

嗨,謝謝你的回答,數據實際上現在會很大,但是用戶會很多... –

+0

我會建議把它分成小部分,讓客戶請求時(不要給所有人數據在同一時間)。因爲它很容易緩存,對數據模式更改靈活,交付更快。 – Lukabot

回答

1

數據庫中的性能始終是這些大問題之一。我不認爲這是正確的答案,因爲最適合你的取決於很多事情。如果這將是一個數據採集的過程,例如每天一次,我會逐步分批採集數據。批量大小取決於您的服務器,數據庫的大小等等。我個人會嘗試使用不同的大小,並且我會監視服務器以查看它是如何發生的。

如果這是其中一次(因爲也許你正在進行遷移),那麼你可以一次取所有的數據。但是,這也取決於您是否具有遷移的SLA,MySQL需要多長時間才能返回整組數據等。

還要考慮到,即使您使用的批處理大小現在對你來說是完美的,它可能不會像將來那樣取決於數據庫的增長。

我認爲最好的答案是:嘗試不同的方法(所有數據,按組或批量大小),監視服務器,並選擇最適合您的方法。

希望這可以幫助你解決你的問題。

+0

謝謝你,我認爲一個人不應該被置於一個教條的事實可能是正確的選擇。但我可能應該補充說,這些數據幾乎就像是亞馬遜,在那裏每天都會有用戶查詢,但他們可能正在尋找鞋子,你會得到數據,價格和描述鞋子全部一次,然後將它分組並放入列中,或者首先獲取所有尺寸,然後着色,然後查看每個請求並將其插入列中... –

+0

我認爲我會爲小請求假設你的數據庫很大(或者它會增長)。他們跑得更快,更容易處理。如果你全部都有大的SELECTS,那就不可能在執行計劃中將某些東西縮減爲INDEX SEEK,你將不斷掃描索引或表格。此外,如果您將所有數據發送給客戶,您將如何處理產品更新的情況?您需要刷新客戶端並重新提出相同的重要請求。 – asemprini87

+0

謝謝,你有相同的答案,並提出一些我沒有想到的好點! –

相關問題