簡體   English   中英

為了將數據存儲到數據庫中,在PHP中使用序列化是一種好習慣嗎?

[英]Is it good practice to use serialize in PHP in order to store data into the DB?

我在php.net上發現了一個關於序列化數據的有趣評論,以便將其保存到數據庫中。

它說如下:

請! 請! 請! 請勿序列化數據並將其放入數據庫。 Serialize可以這種方式使用,但是缺少關系數據庫和數據庫引擎中固有的數據類型。 這樣做會使數據庫中的數據不可移植,難以閱讀,並且會使查詢復雜化。 如果您希望您的應用程序可以移植到其他語言,比如讓您說您發現要在應用程序的某些部分使用Java,那么使用Java是有意義的,序列化將成為臀部的痛苦。 您應始終能夠查詢和修改數據庫中的數據,而無需使用第三方中間工具來操作要插入的數據。

我在職業生涯中遇到過這么多次,這使得難以維護代碼,代碼存在可移植性問題,而且數據更難以遷移到其他RDMS系統,新模式等。它還有另外的缺點根據您已序列化的某個字段搜索數據庫使其變得混亂。

這並不是說serialize()沒用。 它不是......使用它的好地方可能是包含數據密集型操作結果的緩存文件。 還有很多其他的......只是不要濫用序列化,因為下一個出現的人會有維護或遷移的噩夢。

我想知道這是否是關於將數據序列化用於數據庫目的的標准視圖。 這意味着有時使用它是否是一種好習慣,或者是否應該避免使用它。

例如,我被指示最近自己使用序列化。

在這種情況下,我們必須保存到MySQL表中的數據如下:

  • 汽車品牌。
  • 汽車模型。
  • 車版。
  • 汽車信息

Car info是一個表示版本所有屬性的數組,因此它具有大量可變屬性(在100個屬性下)。 這個數組是要序列化的數組。

我為了使用序列化而給出的主要原因如下:

作為大量字段,最好序列化數據以提高性能,而不是為每個屬性或多個表創建字段。

就個人而言,我更贊同php.net中的評論,而不是最后的斷言,但我想在這里有更多關於此的合格意見。

作為大量字段,最好序列化數據以提高性能,而不是為每個屬性或多個表創建字段。

我認為這高度依賴於用例。 如果有一類Customer希望擁有關於所有運行柴油的汽車的信息或汽車的任何其他特定數據(使用燃料似乎最簡單)。 您需要從數據庫中獲取所有汽車,對其進行反序列化,檢查屬性並保留列表中包含與客戶相關的所有汽車。

示例:我們必須將一些與人員相關的數據從舊客戶CMS移動到新客戶CMS。 而不是將每個屬性很好地映射到數據庫上,整個信息是舊數據庫中的單個字符串。 因此,我們不必使用適當的數據庫結構,而是需要使用大量的regex-foo來將數據再次轉換為適當的結構。 當然,這是一項昂貴的(包括貨幣和工作負載)任務。 在這種情況下,問題並不是那么大,因為數據量是可管理的。 但想象相同的場景有數百萬行,而不僅僅是一個字符串....

您發布的評論僅涉及IMO的數據結構。 我同意,存儲這些並不是很好也不是很有效。 在某處輸入拼寫錯誤或添加語言的其他部分不知道的新屬性會容易得多。 這遲早會引起問題。

另一方面,存儲一些更容易移植的配置可能是序列化數據的好例子。 您可能會認為外部設置文件對於這種情況更為理想,但這將高度依賴於案例/哲學/客戶/ ......

TL; DR在大多數情況下,使用適當的模式遲早會有利於整個開發,速度明智和復雜性(因為我更喜歡閱讀許多表格描述而不是巨大的,神秘的字符串)。 可能存在一些使用情況,其中序列化數據是可接受的,因此如果這是好的或不好的做法給出有限的答案並不那么容易且高度依賴。

暫無
暫無

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

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