В настоящее время я разрабатываю приложение, позволяющее студентам управлять своими курсами, и я не знаю, как разработать базу данных для определенной функции.
Клиент, как и Facebook, очень хочет, чтобы, когда студент отображал список людей, которые в данный момент изучают определенный курс, сначала отображаются люди с большинством взаимных курсов с зарегистрированным пользователем. Почти такая же, как в Facebook функция «Предложения друзей» с дополнительным фильтром.
В качестве дополнительной функции я хотел бы добавить функцию поиска, позволяющую студентам искать другую, и сначала отображать в результатах поиска людей с большинством взаимных курсов с зарегистрированным пользователем.
В настоящее время я использую MySQL, планирую использовать Cassandra для некоторых других функций, а также использую Memcached для кэширования результатов и Sphinx для поиска.
Спасибо.
-
Приложение разработано на Python, кстати
И я забыл упомянуть, что стандартный подход (использующий хороший запрос MySQL для вычисления всего этого с помощью предложения ORDER BY) слишком медленный. Так как чтение происходит намного чаще, чем чтение, я бы хотел, чтобы большая часть логики выполнялась один раз, когда добавляется курс отношения <->.
Я думал об обновлении счетчика «взаимных курсов», специфичного для одного кортежа (пользователя, курса), который будет увеличен для всех пользователей курса, когда зарегистрированный пользователь присоединяется к новому курсу (или уменьшается, когда он покидает его).