【发布时间】:2012-04-18 04:50:49
【问题描述】:
假设我正在从数据库中加载大量对象。这些是普通的、普通的 PHP 对象,没有任何花哨的继承。假设我可能会更改其中一些对象并希望将它们写回数据库,但只使用在 UPDATE ... SET ... 查询中实际不同的字段。还假设我事先不知道要更改哪些对象。
我想我需要复制所有加载的对象,并保留以供参考和比较,如果我需要将对象写回数据库。
我看到了两种可能的方法:
- 我可以克隆所有加载的对象并存储在单独的列表中。保存时,使用索引在列表中查找对象,然后比较值。
- 或者,我可以简单地将加载到字符串中的所有内容序列化,然后保留。保存时,在字符串中找到序列化的对象(以某种方式),将其反序列化,比较值,然后就可以了。
在效率方面(主要是内存,但速度也是一个考虑因素),哪个比较好?
【问题讨论】:
-
我不确定你的对象有多少个字段,但是更新对象上的所有字段都没有错,无论是只有 1 还是 2 发生了变化 - 这样你就不需要保留原件。更新 20 个字段不会比更新 2 个字段慢很多,当然除非表很大并且有索引和其他引用表。
-
@AleksG:20 个字段,50 000 个对象(一个猜测的大数字)= 1 000 000 个要更新的字段。
-
@hakre 有了这么多的更新,OP 最好在进行任何更新之前禁用所有索引。
-
我会说加载的对象数量在 100 到 10,000 之间变化。更改的对象数量通常很少 (1-2%)。
标签: php performance serialization