Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Nick Kostirya                        2:5020/400     24 Feb 2004  11:41:21
 To : Alex Povolotsky
 Subject : Re: Страшная быль
 -------------------------------------------------------------------------------- 
 
 
 "Alex Povolotsky" <tarkhil@over.ru> сообщил/сообщила в новостях следующее:
 news:87d68557dd.fsf_-_@tarkhil.over.ru...
 
 > "Nick Kostirya" <nick@han.kherson.ua> writes:
 >
 >
 > >> Рассказать, что ли, страшную быль о том, как программист решал задачу с
 > > БД?...
 > >
 > > Расскажите.
 >
 > Дано: сайт с анекдотами, который безбожно тормозит даже под не очень
 > большой нагрузкой.
 >
 > Исследования показывают следующую картину:
 >
 > База анекдотов. Hомер (нумерация не сквозная), категория, текст. Hужно на
 > каждой странице выдавать три случайных анекдота нужной категории.
 >
 > Как это решает программист?
 >
 > в цикле генерирует случайное число от 1 до максимального номера анекдота,
 > выбирает (путем select *) анекдот. Если подходит - добавляет к списку,
 
 если
 
 > нет - генерит еще один запрос. Пока не наберет три анекдота. Учитывая
 > примерно два десятка категорий, заполненных более-менее равномерно, и
 > примерно 20% пустых номеров - получаем, что для трех анекдотов нужно
 > сделать как бы не полсотни запросов. Всегда с select *, а анекдоты бывают
 > длинные...
 >
 > Жаль, он уже уволился. Убил бы...
 >
 > Кстати, при экспериментах выяснилось, что order by rand() у mysql
 
 работает,
 
 > мягко говоря, не быстро. Оптимальный вариант - делать временную таблицу, в
 > нее вытягивать категорию, и уже из таблицы в памяти - select * from
 > temptable limit 3 order by rand()...
 
 А если использовать MERGE таблицу для всех анекдотов, "распихав" каждую
 категорию в отдельную таблицу.
 Это лучше, чем каждый раз создавать временные таблицы.
 Только MERGE  на 3 ветке немного глючило.
 
 Hо лучше, по моему, использовать тип Recno , что в Berkeley DB, в режиме
 изменения логических номеров записей, также распихав каждую категорию в
 отдельную таблицу. Тогда зная количество записей в каждой категории,
 сгенерировав случайные числа, выдергиваем нужные анекдоты.
 Скорость будет хорошая.
 
 P.S. Прошу прошения, что ушел в оффтопик.
 --- ifmail v.2.15dev5.3
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Страшная быль   Nick Kostirya   24 Feb 2004 11:41:21 
Архивное /ru.perl/6577cad2bd63.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional