13

DBに保存するためにデータをシリアル化することについて、 php.netで興味深いコメントを見つけました。

次のように述べています。

お願いします!お願いします!お願いします!データをシリアライズしてデータベースに配置しないでください。シリアル化はそのように使用できますが、それではリレーショナル データベースの要点と、データベース エンジンに固有のデータ型が失われています。これを行うと、データベース内のデータは移植できなくなり、読み取りにくくなり、クエリが複雑になる可能性があります。アプリケーションを他の言語に移植できるようにしたい場合、たとえば、Java を使用することが理にかなっているアプリケーションの一部に Java を使用したい場合、シリアライゼーションはお尻の痛みになります。サードパーティの仲介ツールを使用して挿入するデータを操作することなく、データベース内のデータを常にクエリおよび変更できる必要があります。

私はキャリアの中で何度もこれに遭遇しました。これにより、コードの保守が困難になり、コードの移植性の問題が生じ、データを他の RDMS システムや新しいスキーマなどに移行することがより難しくなります。また、不利な点も追加されます。シリアル化したフィールドの 1 つに基づいてデータベースを検索するのが面倒になるという問題です。

serialize() が役に立たないと言っているわけではありません。そうではありません...たとえば、データ集約型の操作の結果を含むキャッシュ ファイルを使用するのに適した場所です。他にもたくさんあります... シリアライズを乱用しないでください。

これがDBの目的でデータをシリアル化することについての標準的な見方であるかどうかを知りたい. 時々使用するのが良い習慣なのか、それとも避けるべきなのかを意味します。

たとえば、私は最近、serialize を自分で使用するように指示されました。

この場合、MySQL テーブルに保存する必要があったデータは次のとおりです。

  • 車のブランド。
  • 車のモデル。
  • 車バージョン。
  • 車情報。

車の情報は、バージョンのすべてのプロパティを表す配列であったため、大量の可変プロパティ (100 プロパティ未満) でした。この配列は、シリアル化される配列でした。

serialize を使用するために与えられた主な理由は次のとおりです。

フィールド数が多いため、各プロパティまたは複数のテーブルに対してフィールドを作成するのではなく、パフォーマンスを向上させるためにデータをシリアル化することをお勧めします。

個人的には、この最後の断言よりも php.net の解説に同意しますが、これについては私の意見よりも具体的な意見を述べたいと思います。

4

1 に答える 1

11

フィールド数が多いため、各プロパティまたは複数のテーブルに対してフィールドを作成するのではなく、パフォーマンスを向上させるためにデータをシリアル化することをお勧めします。

これはユースケースに大きく依存すると考えます。Customerディーゼルを実行しているすべての車に関する情報、または車のその他の特定のデータを取得したいクラスがあるとしたらどうでしょう (燃料を使用するのが最も簡単なようです)。データベースからすべての車を取得し、シリアル化を解除し、プロパティをチェックして、顧客に関連するすべての車のリストを保持する必要があります。

例: 一部の個人関連データを古い顧客 CMS から新しいものに移動する必要がありました。データベースに各属性を適切にマッピングする代わりに、古いデータベースでは情報全体が 1 つの文字列でした。したがって、適切なデータベース構造を使用する代わりに、データを再び適切な構造に変換するために、多くの regex-foo を実行する必要がありました。もちろん、これは費用のかかる (金銭的にも仕事量的にも) 作業でした。この場合、データの量が管理可能だったので、問題はそれほど大きくありませんでした。しかし、数百万の行と単一の文字列以上の同じシナリオを想像してみてください....

あなたが投稿したコメントは、データ構造IMOについてのみ話している. そして、これらを保存することはあまり良くなく、効率的でもないことに同意します。どこかでタイプミスをしたり、言語の他の部分が認識していない新しいプロパティを追加したりする方がはるかに簡単です。これは遅かれ早かれ問題を引き起こします。

一方、より簡単に移植できるいくつかの構成を保存することは、データをシリアル化するための適切なケースかもしれません。このような場合には外部設定ファイルの方が理想的であると主張することもできますが、これはケース/哲学/顧客/...に大きく依存します。

TL;DR ほとんどの場合、適切なスキーマを使用すると、遅かれ早かれ開発全体、速度、複雑さの点でメリットがあります (巨大で不可解な文字列ではなく、多くのテーブルの説明を読むことを好むため)。データのシリアル化が許容されるユースケースがいくつかあるかもしれません。そのため、これが良いか悪いかを判断するのは簡単ではなく、依存性も高くなります。

于 2012-09-26T12:30:12.560 に答える