2014-11-23 55 views
1

我有一個創建日誌的程序,這些日誌用於計算每個客戶端的餘額,趨勢等。目前,我將所有內容都存儲在單獨的MYSQL表中。我通過加入這兩個表將所有日誌鏈接到特定的客戶端。當我訪問客戶端時,它從log_table中提取所有日誌並生成報告。該報告取決於所使用的過濾器,主要是日期和類別特定。PHP array VS MSQL表

我的問題是我的計劃在我們積累更多日誌和客戶時的表現。我的直覺告訴我要將日誌信息以序列化數組的形式存儲在user_table中,因此整個會話只使用一個查詢。然後,我可以使用該日誌數組並使用PHP進行過濾,與之前一樣,它在MYSQL查詢中進行過濾(使用多種方法,例如BETWEEN進行日期和其他比較)。

我的問題是,如果我使用序列化數組來存儲日誌,而不是使用MYSQL表來存儲每個單獨的日誌,您是否認爲性能會得到改進?我們估計每個客戶約500-1000個日誌,約有50000個客戶(並且在增長)。

+0

你意識到你可以用單個SQL查詢檢索多個數據庫表的行......問題是你使用多個表時,你應該使用單個表 – 2014-11-23 16:32:09

+0

我不確定我明白。在這種情況下,我使用了兩個表client_table和log_table。 client_table有一個ID,用於將每個單獨的日誌鏈接到相應的客戶端。我希望這是有道理的。 – 2014-11-23 16:38:04

+0

我想我誤解了....我以爲你爲每個客戶端使用了一個單獨的日誌表 – 2014-11-23 16:39:32

回答

0

這聽起來像你不明白什麼使數據庫強大。這不是關於「存儲數據」,而是關於「以可被索引,優化和過濾的方式存儲數據」。你不存儲序列化數組,因爲數據庫不能做任何事情。它看到的只是一個沒有任何結構的單一字符串,它可以有效地工作。以這種方式使用它甚至會導致甚至使用數據庫的全部原因。

相反,弄清楚架構的陣列中的數據,然後正確插入您的數據,每個專用表列一個字段,這樣就可以實際使用的數據庫作爲數據庫,使其能夠優化其存儲,檢索和數據庫代數(選擇,加入和過濾)。

  • 序列化數組中的數組是否比本地PHP更快?不,當然不。您已經強制數據庫充當平面文件,額外的dbms開銷。
  • 正在使用數據庫比原生PHP更快嗎?通常,是的,很多。

另外,這部分是非常重要的,這意味着你的數據庫可以住「無處不在」,包括更快的機器旁邊你的服務器,讓你的數據庫可以在0.1秒返回結果,而不是PHP頂100%cpu來過濾您的數據,並阻止您的網站用戶獲取頁面結果,因爲您阻止了所有線程。事實上,出於這個原因,在PHP中保留這個任務是絕對沒有意義的,即使你在實現模式和查詢方面不好,忘記緩存結果並在這些緩存結果中進行後續搜索,忘記索引列上的表格用於極其快速的檢索等等。

PHP並不是爲了完成所有繁重的工作。它應該詢問其他需要的數據,並充當「請求進入」,「獲取響應基礎數據」和「響應被髮送回客戶端」之間的粘合劑。它應該啓動,進行呼叫,產生結果,並儘可能快地死亡。

0

這實際上取決於您如何使用數據。如果您不需要搜索該數據,您可能需要考慮與mongo進行存儲。如果你這樣做,把它放在單獨的行中,並以使它們快速查找的方式創建索引。

如果您有100億行,並且需要查找其中的100個行來進行計算,那麼如果您的索引正確完成,它應該仍然很快。

現在,如果您有100億行,並且您希望對10,000個行進行總計,那麼將該總額保存在某處可能會更有效。無論何時添加,刪除或更新會影響總數的新行,您都可以更改該總數。考慮一個銀行,賬戶中的所有項目都存儲在一個表格中,但餘額存儲在用戶賬戶中,並且不會根據每次用戶想要檢查餘額時的所有交易進行計算。