![](/img/trans.png)
[英]MySQL + PHP: ~500kb JSON file - Loading data as tables and fields VS as a single serialized variable
[英]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.