首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅缓存来自FuelPHP ORM结果的关系数据

仅缓存来自FuelPHP ORM结果的关系数据
EN

Stack Overflow用户
提问于 2014-09-12 16:41:10
回答 1查看 364关注 0票数 1

我正在用FuelPHP & mySql开发应用程序,我正在使用提供的ORM功能。问题在于下表:

表: pdm_data

  • 大型表(350+列,许多行)
  • 表数据是相当静态的(每天只更新一次)
  • 主键: obj_id

表: change_request

  • 只有几个列
  • 数据经常变化(10-20次/ min)
  • 引用主键(obj_id从表pdm_data)

用户可以自定义对他们可见的数据表,例如。他们可以节省过滤器(如。列上的change_request.obj_id=34和pdm_data.state = 6),然后将它们转换为使用ORM进行实时查询。

但是,使用ORM的查询非常慢,因为表pdm_data很大,甚至100行都会导致许多mbs的数据。最大的问题似乎出现在FuelPHP ORM中:即使查询本身相对较快,模型水合等也需要很多秒。理想的解决方案是缓存pdm_data表的结果,因为它是相当静态的。但是,据我所知,FuelPHP不允许您通过关系来缓存表(您可以缓存查询的完整结果,因此可以同时缓存表或不缓存)。

此外,使用普通的带有join的SQL查询而不是ORM并不是理想的解决方案,因为我需要处理其他水合物模型很棒的任务。

我目前有以下代码:

代码语言:javascript
复制
 //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();

..。

有人有很好的解决办法吗?

感谢您的阅读!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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就是不合适的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25812977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档