簡體   English   中英

處理序列化數據與添加更多字段-PHP-MySQL

[英]crunching serialized data vs adding more fields - php - mysql

好的,讓我們假設我有50條要存儲在表的每個記錄中的信息。 當我提取數據時,我將對其中一些進行基本數學運算。 在任何給定的頁面請求中,我將提取一百條記錄並進行計算。

有哪些性能影響:

A-將數據作為序列化數組存儲在單個字段中,並在php中進行運算

B-將數據存儲為五十個數字字段,並讓mysql做一些總和和平均數

請假設在這五十個領域中標准化不是問題。 還請假設我不需要按任何這些字段進行排序。

提前致謝!

首先,我永遠不會存儲serialized數據,因為它的可移植性不夠。 也許在JSON編碼字段中,但未序列化。

其次,如果您要對數據做任何事情(搜索,匯總等),請將它們設置為表中的列。 我的意思是什么(排序等)。

在列中存儲格式化數據(序列化,json等)的唯一一次是只讀的。 這意味着您沒有對它進行排序,沒有在where子句中使用它,沒有在匯總數據,等等。

數據庫服務器在執行基於集合的操作時非常高效。 因此,如果您要進行任何類型的匯總(求和等),請在MySQL中進行。 它將比使PHP變得更加高效。

MySQL幾乎肯定會比PHP更快地執行這些計算。

盡管我幾乎總是建議使用選項B,但我本人也遇到了一種獨特的情況,在這種情況下,將序列化存儲到文本字段中可能更有意義。

我有一個客戶,他們的網站上有一份申請表。 表單上大約有50個字段,並且所有數據將只能是只讀的。

此外,此應用程序可能會隨着時間而改變。 可以添加字段,可以刪除字段。 通過使用序列化數據,我可以將所有問題和答案以序列化格式保存。 如果表格更改,則舊數據以及原始問題將保持不變。

我和喬納森一起去! 如果您有一個表,其中字段的數量將根據用戶做出的選擇或內容而變化,並且這些字段既不聚合也不計算,那么我也會對這些值進行序列化(和base64_encode)或json_encode。

Joomla和Wordpress也這樣做。 Typo3的一些表有很多列,這很丑陋:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM