我正在用FuelPHP & mySql开发应用程序,我正在使用提供的ORM功能。问题在于下表:
表: pdm_data
表: change_request
用户可以自定义对他们可见的数据表,例如。他们可以节省过滤器(如。列上的change_request.obj_id=34和pdm_data.state = 6),然后将它们转换为使用ORM进行实时查询。
但是,使用ORM的查询非常慢,因为表pdm_data很大,甚至100行都会导致许多mbs的数据。最大的问题似乎出现在FuelPHP ORM中:即使查询本身相对较快,模型水合等也需要很多秒。理想的解决方案是缓存pdm_data表的结果,因为它是相当静态的。但是,据我所知,FuelPHP不允许您通过关系来缓存表(您可以缓存查询的完整结果,因此可以同时缓存表或不缓存)。
此外,使用普通的带有join的SQL查询而不是ORM并不是理想的解决方案,因为我需要处理其他水合物模型很棒的任务。
我目前有以下代码:
//Initialize the query and use eager-loading
$query = Model_Changerequest::query()->related('pdmdata');
foreach($filters as $filter)
{
//First parameter can point to either table
$query->where($filter[0], $filter[1], $filter[2]);
}
$result = $query->get();..。
有人有很好的解决办法吗?
感谢您的阅读!
发布于 2014-09-13 14:02:20
版本1 ORM的缓慢性是一个已知的问题,正在用v2解决。我当前的基准测试显示,v1 orm需要2.5秒(在我的机器上,ymmv)才能水合物化40k行,而当前的v2 alpha大约需要800 My。
现在,我担心最简单的解决方案是取消对大型选择的ORM,并使用DB类构造查询。我知道您说过要保持ORM的抽象以简化开发,一种解决方案是使用as_object('MyModel')返回填充的模型对象。
另一方面,如果性能是您关心的主要问题,那么ORM就是不合适的。
https://stackoverflow.com/questions/25812977
复制相似问题