Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP处理大型(对象)数据集_Php_Sorting_Data Structures_Iteration - Fatal编程技术网

用PHP处理大型(对象)数据集

用PHP处理大型(对象)数据集,php,sorting,data-structures,iteration,Php,Sorting,Data Structures,Iteration,我目前正在从事一个广泛依赖EAV模型的项目。两个实体作为其属性分别由一个模型表示,有时扩展其他模型(或至少扩展基础模型) 到目前为止,这已经非常有效,因为应用程序的大多数区域只依赖于过滤的实体集,而不是整个数据集 但是,现在我需要解析整个数据集(即:所有实体及其所有属性),以便提供基于属性的排序/过滤算法 该应用程序目前大约由2200个实体组成,每个实体大约有100个属性。每个实体都由单个模型表示(例如客户机\u模型\u实体),并具有一个名为$\u属性的受保护属性,该属性是属性对象的数组 每个实

我目前正在从事一个广泛依赖EAV模型的项目。两个实体作为其属性分别由一个模型表示,有时扩展其他模型(或至少扩展基础模型)

到目前为止,这已经非常有效,因为应用程序的大多数区域只依赖于过滤的实体集,而不是整个数据集

但是,现在我需要解析整个数据集(即:所有实体及其所有属性),以便提供基于属性的排序/过滤算法

该应用程序目前大约由2200个实体组成,每个实体大约有100个属性。每个实体都由单个模型表示(例如
客户机\u模型\u实体
),并具有一个名为
$\u属性
的受保护属性,该属性是
属性
对象的数组

每个实体对象大约为500KB,这会在服务器上产生难以置信的负载。对于2000个实体,这意味着单个任务需要1GB的RAM(以及大量的CPU时间)才能工作,这是不可接受的

在如此大的数据集上进行迭代有任何模式或通用方法吗?分页实际上不是一种选择,因为为了提供排序算法,必须考虑所有因素

编辑:希望让事情更清楚的代码示例:

// code from the resource model
for ($i=0,$n=count($rowset);$i<$n;++$i)
{
    $clientEntity = new Client_Model_Entity($rowset[$i]);
    // getattributes gets all possible attributes from the db and creates models for them
    // this is actually the big resource hog, as one client can have 100 attributes
    $clientEntity->getAttributes(); 
    $this->_rows[$i] = $clientEntity;
    // memory usage has now increased by 500KB
    echo $i . ' : ' . memory_get_usage() . '<br />';
}
//来自资源模型的代码
对于($i=0,$n=count($rowset);$igetAttributes();
$this->_行[$i]=$clientEntity;
//内存使用现在增加了500KB
echo$i.':'.memory_get_usage()。
; }
一种解决方案可以是同时实现和解析一个对象。

一种解决方案可以是同时实现和解析一个对象。

如果属性之间有很多共同点,您可以查看Flyweight模式:。这可能会显著减少需要重显的对象数量nt您的模型。

如果属性之间有很多共性,您可以查看Flyweight模式:。这可能会显著减少表示模型所需的对象数量