Данные таковы, что без пользовательского ввода любой данный элемент может быть лучшим бомбардиром. Я рассмотрел выборку по всем возможным пользовательским вводам и сохранению предварительно вычисленных оценок для каждой строки, но для миллиона строк это действительно начинает оспаривать ограничения хранения. Запросы не являются сложными, они просто целевые числа, которые должны быть сопоставлены с полями базы данных при условии довольно сложного расчета с количеством настраиваемых параметров.

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

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

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

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

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

Ответы на вопрос(3)

Ваш ответ на вопрос