1
wtbhk 2013-06-11 09:54:41 +08:00
楼主比我写的好多了,我上次那坑因为有多对多的关系,至今没找到好的解决方案(其实是有好的方案但是无法理解)
|
2
raincious OP @wtbhk 多对多我也没法解决,想想看……就不支持好了……
现在我担心的还是创建的实例太多了。我发完这个帖子之后把代码改了下,用fetchWith的时候一部分实例创建之后会自动注销。但是内存占用还是没降下来。 我只Fetch了10个Row,内存使用就2M了,要是100个Row那真不敢想……。 又或者可能我太过敏了,就算100个row也和10个row区别不大? 反正我这套数据库查询的东西一起用。。我就觉得代码速度慢了一大截,捉鸡啊真。 |
3
chemzqm 2013-06-11 12:24:36 +08:00
我觉着关系型数据库查询ORM就是个硬伤,效率低不算,维护更让人恶心,不如拼接sql语句呢。
|
4
raincious OP @chemzqm 是的,所以有人说ORM是反射计:http://seldo.com/weblog/2011/08/11/orm_is_an_antipattern
所以我目前写这个ORM的另一个目的是评估必要性。 而且说真的,如果不考虑兼容新,拼接SQL语句个人感觉真是最贴心的…… |
5
raincious OP 悲剧,果然很占用内存。
从数据库里取出2000个结果返回为对象实例,未联表,使用了9兆内存。 改为返回数组,使用5兆内存。 所以内存耗费还是挺高的。 但是……速度尚可,两次查询速度接近。我准备忽略这个问题了。反正我的ORM提供了选项,fetch能够在返回对象实例和对象结果数组中作出选择。 |
6
hardway 2013-07-13 10:32:06 +08:00
个人很喜欢<a href='http://www.martinfowler.com/eaaCatalog/activeRecord.html'>ActiveRecord</a>模式
我的ORM和楼主差不多,不过fetch这一块是用_callStatic来实现了类似: User::get($id) User::find_all(array($c1=>$v1, $c2=>$v2, "condition, limit, order, ...")) User::find_one(array($c1=>$v1, $c2=>$v2)) User::find_by_firstname($name) User::find_one_by_firstname($name) |