4

私は現在、MySQL から MongoDB への切り替えを計画および調査していますが、興味深い考えがありました...データベースに格納する必要がある階層オブジェクトがたくさんあります。私の現在の方法は、コレクションに一連の埋め込みドキュメントを含めることです。それらを検索する必要はありません。PHPオブジェクトをシリアル化し、DBに貼り付けてから、使用したいときにPHPオブジェクトにシリアル化を解除するだけでよいのでしょうか? 別の方法は、Doctrine を ORM として使用することです。

私のプログラミングの直感では、これは悪い設計であり制限的であることがわかりますが、シリアライズとアンシリアライズは非常に高速で、ORM の必要性がなくなると思います。

あなたの意見は何ですか?良いデザインか悪いデザインか?

4

4 に答える 4

10

多くの場合、これは悪い設計と見なされますが、次のすべてが当てはまる場合はうまくいく可能性があります。

  1. それらを検索する必要はありません
  2. それらを照会する (潜在的に) 制限された機能を受け入れることができます
  3. RDBMS によって適用されるリレーショナル整合性やその他の制約は必要ありません
  4. 別の言語でそれらを読む必要がないことを知っています
  5. クラス定義を更新するときに、それらを適切に逆シリアル化、バージョン管理、および移行する方法を知っていると確信しています。
  6. PHP シリアライゼーション形式がリリース間で安定していると確信している (または、移行コードを書く意思がある、または短期間のプロジェクトであり、気にしない)
  7. わずかなパフォーマンスの低下を受け入れる用意があります ( SELECT+deserialize()は単に よりも遅くなりますSELECT)
于 2011-02-04T02:53:05.457 に答える
3

クエリを実行できないのに、なぜデータベースを使用するのですか?

于 2011-02-04T21:42:12.200 に答える
1

それは、あなたが何をしようとしているのかに完全に依存します。

各リクエストが扱うオブジェクトが常に同じである場合、または各リクエスト間に関係がない場合は、問題ない可能性があります。

しかし、私には多くの欠点があります。

  • 後でオブジェクトに対してより高度なことをしたいかもしれません
  • シリアル化されたオブジェクトは信頼性が低い (正確には ACID に準拠していない)
  • シリアル化された php オブジェクトを読み取ることができるものは他にありません。代わりに何か他のものを使用することをお勧めします。
于 2011-02-04T02:48:20.317 に答える
0

オブジェクトのシリアル化は、RSS フィードなどをキャッシュする必要がある場合に非常に便利です。

シリアル化するのは良い使い方だと思いますが、最初にシリアル化を解除しないと文字列として編集できないことも確認します!

于 2011-02-04T03:59:42.543 に答える