Подскажите пожалуйста решение :)

deepslam

Новичок
Всем привет!

На одном из собеседований дали задачу, в итоге сказали, что я неправильно решил, но не сказали как правильно, очень интересно узнать как же правильно =)

Итак, задача:

Есть миллионы статей на сайте.
Нужно вывести несколько последних статей (по дате), сортировка по ID не подойдет, т.к. очень долго исполняется. Нужно придумать как обойти это и вывести таки последние статьи.
В начале я дал глупое решение, получить все ID, выбрать с помощью php несколько последних и их уже запросить полностью с базы. Это жрет очень много памяти.

Еще как вариант я бы сделал решение с временной таблицей, при операциях со статьями автоматически поддерживать ее состояние так, чтобы там всегда были только несколько последних статей.

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

Может быть у кого то будут еще варианты?
Был бы также благодарен если кто то приведет ссылки на хорошую литературу по проектированию нагруженных систем :) Я знаю пока только книжку http://www.ozon.ru/context/detail/id/7353438/
 

shelestov

я тут часто
Судя по книге в конце я так понял речь о MySQL?
<humor>max(id)-10, только пусть никогда не удаляют статьи :))))</humor>
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
deepslam
Тот, кто тебе сказал, что "миллионы статей" и "сортировка по ID не подойдет, т.к. очень долго исполняется" пусть убьются об стену, срочно.
Как раз по автоинкрементному полю есть одна из самых шустрых сортировок.

Задание поставлено архи хреново, и уже просится к тому, чтобы быть посланным.

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

deepslam

Новичок
Ну да, вот и я больше решений не вижу.
Тупо вытаскивать последние статьи по ID, для этого есть поля date :) Видимо у них и правда не удаляются они.

Судя по книге в конце я так понял речь о MySQL?
<humor>max(id)-10, только пусть никогда не удаляют статьи :))))</humor>
Да, именно о нем :)
Ахахаха, юмор оценил
 

MiksIr

miksir@home:~$
В начале я дал глупое решение, получить все ID, выбрать с помощью php несколько последних и их уже запросить полностью с базы. Это жрет очень много памяти.
Был бы также благодарен если кто то приведет ссылки на хорошую литературу по проектированию нагруженных систем :) Я знаю пока только книжку http://www.ozon.ru/context/detail/id/7353438/
Вы правильно сказали про глупый ответ. Но уже то, что он вообще появился у вас в голове говорит о том, что рано вам про "нагруженных систем". Про обычные вам нужно. Про то, как база работает, что такое индексы и зачем они нужны и как они в базе хранятся. Про теорию программирования. В общем, вам бы Junior-ом к какому-нибуть толковому спецу в обычный, а не "хайлоад".
 

deepslam

Новичок
Вы правильно сказали про глупый ответ. Но уже то, что он вообще появился у вас в голове говорит о том, что рано вам про "нагруженных систем". Про обычные вам нужно. Про то, как база работает, что такое индексы и зачем они нужны и как они в базе хранятся. Про теорию программирования. В общем, вам бы Junior-ом к какому-нибуть толковому спецу в обычный, а не "хайлоад".
Благодарю за ссылку, не видел :)
Про индексы я в курсе, спасибо.
 
Сверху