我正在制作一个汽车零件系统,将所有零件存储在 mysql 中,然后搜索它们。
零件添加是这样的:您最多选择 280 个零件并添加所有汽车信息,然后将所有零件序列化并与所有汽车信息一起放入 mysql 中。
(对于这个例子,我会说我当前的数据库有 1000 辆汽车,所有这些汽车都选择了 280 个零件)
问题是,当我有 1000 辆汽车,每辆汽车有 280 个零件时,php 和 mysql 开始变慢并且需要大量时间来加载数据,因为零件的数量是 1000*280=280 000。
我在所有汽车上使用 foreach,然后将每个部分放入另一个数组中。最终数组有 280 000 个项目,然后我通过搜索中的选定部分对其进行过滤,因此在 28 000 个部分中,它可能只需要打印 12 500 个部分(如果有人同时搜索 50 个不同的部分250 辆汽车有这部分)。
示例数据库: http: //pastebin.com/aXrpgeBP
$q=mysql_query("SELECT `id`,`brand`,`model`,`specification`,`year`,`fueltype`,`capacity`,`parts`,`parts_num` FROM `warehouse`");
while($r=mysql_fetch_assoc($q)){
$partai=unserialize($r['parts']);
unset($r['parts']); //unsetting unserialized parts so the whole car parts won't be passed into the final parts-only array
foreach($partai as $part){
$r['part']=$parttree[$part]; //$parttree is an array with all the part names and $part is the part id - so this returns the part name by it's id.
$r['part_id']=$part; // saves the part id for later filtering selected by the search
$final[]=$r;
}
}
$selectedparts=explode('|', substr($_GET['selected'], 0,strlen($_GET['selected'])-1)); //exploding selected part ids from data sent by jquery into an array
foreach($final as $f){
if(in_array($f['part_id'], $selectedparts)){
$show[]=$f; //filtering only the parts that need to be shown
}
}
echo json_encode($show);
这是我用于将所有汽车部件放入数组并将其作为 json 发送到浏览器的代码。
我目前没有处理分页,但我稍后会添加它以仅显示 10 个部分。
解决方案是否可以将所有部分索引到不同的表中一次 24 小时(因为每天都会添加新的部分)然后只是强调 mysql 而不是 php?因为 php 现在正在做所有艰苦的工作。
或者使用 memcached 之类的东西来存储最终未过滤的数组一次 24 小时,然后只过滤需要用 php 显示的部分?
这些是我考虑过的选项,但我知道必须有更好的方法来解决这个问题。