Я создаю магазин и хотел бы рандомизировать страницу продукта, но только менял его один раз в день.Postgres - рандомизировать результаты один раз в день
Я знаю, что рандомизатор с номером семени может возвращать согласованные результаты, поэтому, возможно, используя текущий день, поскольку семя будет работать.
Кэширование также будет работать или хранить результаты в таблице.
Что было бы хорошим способом сделать это?
Если ваш стол служит не только для этой цели, возможно, лучше иметь отдельную маленькую таблицу 'random_picks', содержащую только выбранные идентификаторы pk. Присоедините это к большой таблице в своем запросе. Это немного медленнее, чем наличие колонки в самой таблице, но все же очень быстро. Вам нужно установить * index * в любом случае. Добавление столбца для специального назначения добавляет (небольшую) стоимость для каждой операции в большой таблице, а обновление большой строки означает запись новой строки каждый раз. Также чище и привилегии легче разделить. –
Кроме того, будьте осторожны при выполнении RAND(), так как он может быть ОЧЕНЬ медленным, так как db становится большим. Дополнительная информация: http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-table/ Я не знаю, т. е. ваше решение будет хорошо масштабироваться, но, вероятно, не очень важно, если вы используете его только как рейк-задачу, а не через Интернет. – Josh
Спасибо, ребята. Я очень хорошо знаю последствия этого, поэтому, если сайт станет большим, я добавлю некоторые улучшения, такие как отдельная таблица индексов, и, возможно, один запрос для обновления всех заказов сортировки сразу (не сложно). На данный момент это работает. :) –