If I understand correctly, you're running some finds to produce a
giant array of user ids that match the conditions submitted by the
user. THEN you're trying to take that list of user ids and pass them
as a condition to a separate find to return the user details for each
of those ids?
First off, why not just pull all that information at once in a single
find? Are you using the contain node in your find options to specify
related models? You can specify conditions on the related models
themselves in the contain.
$this->User->find('all', array(
'contain' => array(
'UserDegree' => array(
'conditions' => array('UserDegree.degree_id' => array(2, 4,
6))
)
),
'conditions' => array('User.age >' => 22, 'User.age <' => 27)
)
On Jun 16, 5:05 am, Femi Taiwo <[email protected]> wrote:
> Hi all,
> I'm having a scalability problem, and urgently need to refactor. The project
> is just 2 months old and already has over 20,000 users.How do you handle
> passing an array with 5000+ values as a condition
> e.g. $conditions = array('User.id'=>$bigArray);
> As the records grow bigger, it takes longer.
> I'm not looking to paginate because what happens is that an alert is sent to
> the users in the final result set. Browsing through the result set is NOT
> necessary.
> Models?I have aUsermodel with the following key relationships
> hasMany UserDegree
> hasMany Certification
> hasMany Skill
> hasMany Language
> belongsTo City
> The User model has a few columns as well - dob, marital status and gender.
> Herein lies the problem - a user can set different criteria for searching
> through the entire user database using any of the attributes above.
> She can say for example, I want users in Kansas, aged between 22 and 27, who
> have degrees in either Computer Science, Mathematics or Physics, has
> Marketing skills
> and can speak a bit of French.
> What I do right now is select from the users table, those aged between 22 and
> 27, then amongst these ones, those with the relevant degrees => then get from
> this set, the ones that have marketing skills. So I keep filtering using
> their user_ids. and passing them to the relevant model using conditions
> like$conditions = array('UserDegree.user_id'=>$bigArray);
> Initially, this worked well with a few thousand records. But now with 20,000.
> Takes 3-5 seconds and is really cpu intensive and hard on the MySQL server.
> What can I do?
> Thanks!!
> Femi
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---