データベースから多数のオブジェクトをロードしているとします。これらは通常の、普通のPHPオブジェクトであり、想像以上のものからの継承はありません。これらのオブジェクトのいくつかを変更し、それらをデータベースに書き戻したいと思うが、UPDATE ... SET ...クエリで実際に異なるフィールドのみを使用するとします。また、どのオブジェクトが変更されるのか事前にわからないとします。オブジェクトのキャッシュ - クローンオブジェクトやシリアル化されたデータを格納する方が効率的ですか?
私は、すべてのオブジェクトのコピーを作成し、オブジェクトをデータベースに書き戻す必要がある場合は参照と比較のために保管しておく必要があると考えています。
- は、私はどちらかが別のリスト内のすべてのロードされたオブジェクトや店舗のクローンを作成することができます は、私は2つの可能なアプローチを参照してください。保存するときは、インデックスを使用してリスト内のオブジェクトをルックアップし、値を比較します。
- または、文字列にロードされたすべてをシリアライズして、そのまま使用することができます。保存するときに、文字列内のシリアル化されたオブジェクトを見つけて(何らかの形で)、シリアル化して値を比較してください。
効率性(主にメモリですが、速度も考慮されます)はどれが好ましいでしょうか?
オブジェクトのフィールド数はわかりませんが、1または2だけが変更されているかどうかにかかわらず、オブジェクトのすべてのフィールドを更新するには何も問題ありません。この方法で元のコピーを保持する必要はありません。もちろん、テーブルが巨大で、インデックスやその他の参照テーブルを持っていない限り、20フィールドの更新は2フィールドの更新よりもはるかに遅くはありません。 –
@AleksG:20フィールド、50 000オブジェクト(推測される多数)=更新するフィールドは1 000 000です。 – hakre
@hakreの数の更新では、OPは更新が行われる前にすべてのインデックスを無効にする方が良いでしょう。 –