#php #algorithm #sorting #mongodb
#php #алгоритм #сортировка #mongodb
Вопрос:
Рассмотрим, что я недавно вычислил один миллион (1 000 000) значений.
Я хочу получить самые высокие значения 10 из этих миллионов значений.
Я не решаюсь выбрать, следует ли сортировать в PHP или использовать MongoDB (индексированный) для их сортировки.
Я знаю, что меньшее использование базы данных может повысить общую производительность.
Но я не знаю, какой из них будет быстрее в этом случае, что, если MongoDB невероятно быстр, так что даже использование MongoDB только для сортировки быстрее, чем использование PHP для сортировки.
Если php быстрее и лучше, какой алгоритм сортировки следует выбрать?
Дайте мне несколько предложений.
Комментарии:
1. Я не знаком с MongoDB … у него хорошая индексация? Я бы сказал, попробуйте выполнить некоторые временные тесты. 1 миллион строк кажется слишком большим результатом для получения и последующей сортировки. Может быть, предварительно отсортировать сводные таблицы, если данные меняются не слишком часто?
2. В общем, это именно то, для чего нужны базы данных. Это не просто хранилища данных, это фильтры наборов данных! В любом случае сравнительный анализ подскажет вам, что быстрее для вашего конкретного случая.
3. @yzmir Данные меняются очень часто.. Изменяется несколько раз даже за секунду
4. Почему вы хотите сортировать, если вам нужны только верхние 10 значений? Это можно сделать за один проход по этому массиву без какой-либо сортировки и намного быстрее. И, кстати, PHP также использует индексы (хэш-карты) для массивов.
5. Хех, просто чтобы доказать мою точку зрения: ideone.com/5k9FE .
Ответ №1:
MongoDB имеет довольно хороший набор функций для индексов, с другой стороны, в PHP вы можете использовать различные функции, такие как сортировка (которая использует реализацию быстрой сортировки, кстати) и т.д.
Я бы не стал сосредотачиваться только на скорости, если ваш параллелизм не минимален, подумайте, сортируете ли вы результирующий набор в PHP каждый раз, когда хотите его отобразить, и прослушиваете X количество запросов, тогда объем памяти будет примерно X * array size extra overhead
до завершения запроса / запуска.
MongoDB позволяет вам выбирать сортировку по индексу при их создании, поэтому это может быть хорошей идеей, поскольку данные будут добавлены в B-дерево для индексации в правильном порядке (в то время как, с другой стороны, это замедлит вставки по той же причине)
Итак, в итоге, возможно, если бы набор был меньше, я бы выбрал сортировку PHP, но в этом случае (и, как обычно, подобные вопросы заканчиваются) Я бы порекомендовал вам сравнить и принять решение с реальными данными.