您好我正在开发社交网站,需要一个建议。我使用codeignitor框架,php作为核心语言,jQuery作为客户端脚本。
现在,我想在用户可以搜索其他用户的网站上实现用户搜索功能。
如果我使用php进行分页,它有点慢,性能不快,即使数据库很大,也会更慢。
所以我试过的是,我查询了前1000个人并使用json编码并使用此插件一次显示前10个结果http://www.stephenrhoades.com/?p=8
是否有人可以帮助我完成我需要遵循的所有内容,包括技术,提示,查询,mysql数据库等。
这是我当前在模型中的功能
function search_user($cntry,$male,$female,$age_min,$age_max){
$this->db->select('user_profiles.user_id,user_profiles.first_name,
user_profiles.birthday,user_profiles.gender,user_profiles.picture,
user_profiles.last_active,location.city,location.country');
$this->db->from('user_profiles');
$this->db->join('location', 'user_profiles.user_id = location.user_id');
$this->db->limit(800);
// Search condition :::: Country
if($cntry){
$this->db->like('location.country',$cntry, 'both');
}
// Search condition :::: Male or Female
if($male==1 && $female==0) { $g='Male'; $this->db->like('user_profiles.gender',$g, 'both'); }
if($male==0 && $female==1) { $g='Female'; $this->db->like('user_profiles.gender',$g, 'both'); }
// Search condition :::: Age range
if($age_min && !$age_max){
$this->db->where('(YEAR(NOW())-YEAR(user_profiles.birthday)) >= ', $age_min);
}
if($age_min && $age_max){
$this->db->where('(YEAR(NOW())-YEAR(user_profiles.birthday)) >= ', $age_min);
$this->db->where('(YEAR(NOW())-YEAR(user_profiles.birthday)) <= ', $age_max);
}
$this->db->order_by("user_profiles.last_active", "desc");
$query = $this->db->get();
$data=array();
foreach ($query->result() as $row){
$row->last_active=$this->online_status($row->last_active);
$row->birthday=$this->birthday($row->birthday);
$data[]=$row;
}
if ($query->num_rows() > 0)
{
return $data;
}
else
{
$data = array(
'result' =>'404'
);
return $data;
}
}
提前致谢
答案 0 :(得分:3)
有许多因素可能导致此过程缓慢。这些是我们需要解决的问题:
通常,您可以在几毫秒内搜索非常大的数据集 - 因此,只要您正确设置了内容,我就怀疑数据库是否存在问题。
好的,尽管如此......
如果您拥有非常庞大的社交网络,我建议您实施Zend Search Lucene之类的内容。它是一个搜索索引,可以很容易地实现到CodeIgniter中:
您可以将您的用户,他们的个人资料数据,帖子,评论等添加到索引中,并使用强大的语言处理查询语言进行搜索,并以您希望的任何格式快速返回结果。使用ajax和json很容易变成“实时”搜索。