Вот это хороший вариант, но недетерминированный по времени выполнения, против чего Михаил уже возражал.
Особенно много промахов будет вначале, пока объектов в таблице немного.
02.12.2013, 16:52, "Akzhan Abdulin" <[email protected]>:
посчитать селективность (запомнить однократно),потом просто сгенерировать пачку псевдослучайных id и выполнить select по ним (IN) с доп. условием на доступность всем. количество id равно количество нужным поделить на селективность.Получили результат. Если недостаточно, генерируем вторую пачку и отбираем остаток.Итого в среднем один запрос с поиском по PK + фильтр. Редко два.Повторяемость обеспечивается выбором и настройкой алгоритма генерации случайных чисел.,2 декабря 2013 г., 17:27 пользователь Михаил Монашёв <[email protected]> написал:Здравствуйте.
Есть таблица с объектами в mysql. Новые объекты туда добавляются,
плохие объекты удаляются, бывает что по много штук сразу. Некоторые
объекты имеют статус скрытых от всех, а все остальные доступны для
всех. Т.е. в таблице равномерно растёт id объектов, но между соседними
id могут быть дырки, причём большие. И некоторые объекты показывать
нельзя.
Даётся текстовая строка. В идеале нужно для этой строке максимально
быстро выбрать из таблицы случайные 3 разных объекта, доступные для
всех. Причём так, чтобы повторные выборы давали те же самые объекты и
изменения таблицы минимально влияли на это.
Т.е. надо из перла обратиться к mysql-ю минимальное количество раз,
сделав максимально быстрые запросы. Самое важное - скорость. Ей нельзя
жертвовать. Можно жертвовать, но крайне нежелательно, привязкой строки
к объектам. Понятно, что таблица меняется и привязки строк к объектам
будут меняться. Необходимо, чтобы эти изменения были минимальны. Можно
жертвовать количеством выбираемых объектов, например выбирать иногда
не 3, а 2 или 1, но не 0. Можно жертвовать степенью случайности между
выбираемыми объектами, например, выбирая лишь один случайным способом,
а остальные искать поблизости от первого. Нельзя жертвовать охватом
объектов таблицы, т.е. выбираться объекты должны среди всех не скрытых
объектов.
--
С уважением,
Михаил mailto:[email protected]
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
--
Oleg Alistratov
Oleg Alistratov
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
