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

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

表:pdm_data

  • 大规模表格(350列,多行)
  • 表格数据相当静态(每天更新一次)
  • 主键:obj_id
  • 表格:change_request

  • 只有几列
  • 数据变化经常(10-20次/分钟)
  • 引用主键(来自表pdm_data的obj_id)
  • 用户可以自定义对他们可见的数据表,例如。 他们可以在列上保存过滤器(例如change_request.obj_id = 34 AND pdm_data.state = 6),然后将其转换为ORM实时查询。

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

    此外,使用正常的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();
    

    ...

    有人对此有一个很好的解决方案吗?

    谢谢阅读!


    版本1 ORM的缓慢性是一个已知问题,正在使用v2解决。 我目前的基准测试显示v1 orm需要2.5秒(在我的机器上,ymmv)来保护40k行,而当前的v2 alpha需要800毫秒左右。

    现在我担心最简单的解决方案是取消大数据选择的ORM并使用DB类构建查询。 我知道你说过要保持ORM的抽象以减轻开发,一种解决方案是使用as_object('MyModel')来返回填充的模型对象。

    另一方面,如果性能是您主要关心的问题,那么ORM根本就不适合。

    链接地址: http://www.djcxy.com/p/64811.html

    上一篇: Caching only a relation data from FuelPHP ORM result

    下一篇: FuelPHP ORM bulk update related objects