2011-02-04 37 views
4

我正在計劃和研究從MySQL到MongoDB的切換,我剛剛有一個有趣的想法......我有一堆需要存儲在數據庫中的分層對象。我目前的方法是在一個集合中有一堆嵌入的文檔。他們將永遠不需要被搜索。將序列化PHP對象,將它們粘在數據庫中,然後在我想要使用它們時將它們反序列化爲PHP對象,可能是有意義的嗎?另一種方法是使用Doctrine作爲我的ORM。PHP:設計序列化對象並將它們粘貼到數據庫中以備以後使用?

我的編程直覺告訴我,這是不好的設計,並限制的,但我覺得像序列化和反序列化將是非常快,消除了對ORM的需要。

您的意見是?良好的設計或糟糕的設計?

+0

你可以舉一個你的建議文件的例子嗎? – 2011-02-04 02:45:05

+2

這並沒有真正解決你的問題的重點,但如果你想要更多與語言無關的東西,可以考慮使用JSON進行序列化,而不是PHP的`serialize()`。閱讀/調試也更加人性化。 – Schwartzie 2011-02-04 02:45:30

回答

9

在許多情況下,這會被認爲是不好的設計,但如果所有的下列它可以工作適用於:

  1. 你不需要對他們的搜索
  2. 您可以接受(可能)對他們的查詢能力有限
  3. 你不需要由RDBMS強制關係完整性或其它約束
  4. 你知道你永遠不需要在不同的語言閱讀
  5. 你有信心,你就會知道如何反序列化,版本,並正確遷移它們,當你更新你的類定義
  6. 你相信,PHP序列化格式將跨版本穩定(或者你願意寫遷移代碼,或者這是一個短期的項目,你不關心)
  7. 你願意接受一個小的性能損失(SELECT + deserialize()將不僅僅是SELECT
1

它種完全取決於你打算做什麼。

如果它總是相同的對象對每個請求的交易或有每個請求之間沒有關係,它可能是好的。

但我也有很多缺點的:

  • 您可能需要做一些更先進的對象後
  • 序列化對象是一種不可靠的(不完全ACID兼容)
  • 沒有其他東西可以讀取序列化的PHP對象,您可能需要使用其他的東西。
0

序列化對象是慢當你必須緩存一些東西時,比如RSS提要非常有用。

我覺得它很好地利用序列化,但我也想請確保永遠不能編輯作爲一個字符串沒有第一反序列化吧!

3

爲什麼要使用一個數據庫,如果你不能查詢呢?

相關問題