Обработка большого количества данных с помощью MySQL и PHP

Мне нужно найти способ эффективно обрабатывать большой объем данных в PHP / MySQL. Вот ситуация:

У меня есть таблица базы данных с, скажем, миллионом записей. Основываясь на пользовательском входе от PHP, мне нужно ранжировать все эти миллионы записей в соответствии с нетривиальным шагом вычисления, чтобы я мог выбрать верхние скоринговые элементы. Моя проблема в том, что это очень мало оценивается с точки зрения использования памяти, особенно на этапе сортировки, если я переупорядочу данные в столбцы и использую array_multisort.

Альтернативные методы, о которых я могу думать, это:

  • Выполнение вычислений в PHP и повторное вложение данных с оценками во временную таблицу, извлечение наивысших элементов подсчета очков с помощью SELECT … ORDER BY score … LIMIT query
  • Выполнение вычислений в PHP и вывод данных с оценками в CSV-файл, затем вызов утилиты сортировки командной строки, затем чтение в верхнем X-номере строк
  • Выполнение вычислений в MySQL с использованием хранимой процедуры и извлечение верхнего количества X элементов, как в варианте 1. Моя забота об этом заключается в том, подходит ли БД для числа хруста, это будет включать

Это должно быть довольно распространенной проблемой для таких вещей, как поисковые системы. Масштабируемость является приоритетом номер один, но производительность также должна быть очень хорошей. Является ли один из этих подходов лучшим, или есть еще один отличный вариант, который я даже не рассматриваю?

Solutions Collecting From Web of "Обработка большого количества данных с помощью MySQL и PHP"

Предполагая, что ваш набор данных слишком велик для хранения в памяти. Если вам нужны только первые n элементов, вы можете сохранить только верхние результаты в памяти при прохождении через 1 миллион строк. Это также будет работать с вашей временной табличной идеей, написав верхние записи из каждой партии.

Другой вариант – написать определенную пользователем функцию:

http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html

Почему бы не выполнить часть или все ваши вычисления при сохранении строки. Таким образом, вам нужно только сделать это один раз, и у вас есть много времени, чтобы сделать это.

Выполнение этого в сложном ORDER BY является лучшим из всех вариантов, о которых вы упомянули, если это возможно. Но за миллион записей вы все равно столкнетесь с проблемами.

Похоже, вы делаете что-то тяжело, пытаясь сохранить все свои данные в одном месте и заказать его на лету. Нет ли способа сделать предварительный подсчет очков, даже если это несколько баллов, которые вы комбинируете во время запроса для настраиваемого ключа сортировки?

Насколько сложны запросы пользователя? Если вы пытаетесь выполнить полнотекстовый поиск, вы должны получить программное обеспечение, специализирующееся на этой задаче.