对象缓存-存储克隆的对象或序列化的数据是否更高效


Object caching - is it more efficient to store cloned objects or serialized data?

假设我正在从数据库加载大量对象。这些都是普通的、普通的PHP对象,没有任何奇特的继承。假设我可能会更改其中的一些对象,并希望将它们写回数据库,但只使用UPDATE。。。设置。。。查询还假设我事先不知道哪些对象将被更改。

我在想,如果我需要将对象写回数据库,我需要对加载的所有对象进行复制,并保留以供参考和比较。

我看到了两种可能的方法:

  • 我可以克隆所有加载的对象并存储在单独的列表中。保存时,使用索引在列表中查找对象,并比较值
  • 或者,我可以简单地将所有加载到字符串中的内容序列化,然后继续使用。保存时,在字符串中找到序列化的对象(不知何故),取消序列化,比较值,然后就可以了

就效率而言(主要是内存,但速度也是一个考虑因素),哪一个是有利的?

实际上,如果对象的状态发生了变化,您需要一些东西来进行比较。如果您不仅想跟踪哪个对象发生了更改,还想跟踪哪个成员,则需要每个成员都有一个状态。

由于你不想扩展原始对象(例如,它们可能有一个标志,当它们被更改时会失效),你需要从外部跟踪状态。我认为序列化可能是最好的选择。克隆将占用更多内存。