A memory-based collaborative filtering algorithm is optimized for large numbers of users by employing a personalized location-based data partitioning method that allows the system to scale even for very large datasets. Collaborative filtering then takes place on the scaled dataset.