Как я могу выбрать случайный экземпляр из FaunaDB?
FaunaDB позволяет мне индексировать элементы данных по отдельным полям и разбивать на страницы по индексам, но я не вижу способа выбрать случайный элемент.
1 ответ
Выбор случайного элемента в масштабе трудно в любой базе данных. Есть два основных метода на выбор в зависимости от ваших требований.
Определите и используйте индекс для вашего запроса. Это дает вам полный контроль над поведением, таким как выбор одного и того же элемента дважды и т. Д.
Свернуть по существующему индексу. Это более полезно для задач разработки, где вы просто хотите увидеть случайную запись, но не заботитесь о справедливом распределении.
Какой бы вариант вы ни выбрали, вы в конечном итоге захотите получить документацию по индексу FaunaDB. Для варианта 2 этот учебник ленты действий содержит множество примеров запросов к индексным событиям.
Случайный указатель
Поддерживайте поле в каждом экземпляре, который содержит случайное число, и используйте его в качестве значения индекса. Затем разбейте значения над значениями на случайный ключ запуска. Этот метод позволяет случайному процессу выбирать один и тот же элемент несколько раз.
Его можно расширить для большего контроля, добавив целочисленное поле для подсчета количества раз, когда экземпляр был выбран. Вы можете увеличить счет в той же транзакции, которая выбирает экземпляр. Используя счетчик выбора в качестве индекса, вы можете запросить случайный элемент, который был выбран ноль раз. После того как вы выбрали все свои элементы один раз, вы можете повторить с 1
срок, чтобы начать выбирать элементы, которые были выбраны один раз, но не дважды.
Существующий индекс
Данные в FaunaDB являются временными, поэтому вы можете использовать временные функции для выбора экземпляров таким образом, который может быть достаточно случайным, в зависимости от вашего варианта использования.
Если вы хотите воспользоваться преимуществами уже имеющегося у вас индекса и на самом деле не заботитесь о справедливой случайности, а просто хотите получить дешевый способ проверить различные экземпляры в вашем наборе данных, вы можете разбивать на страницы со случайной отметки времени в течение срока службы ваше приложение, используя представление событий, и пример различных экземпляров в вашем классе.
Используя бессрочный индекс класса, вы будете выбирать экземпляры из всего класса, но он также может работать для выбора экземпляров в пределах одного термина индекса с терминами.
Если некоторые периоды времени имеют тяжелый баланс вашей активности записи (недавнее прошлое, для быстро растущего сервиса), вы можете склонить свой синтетический курсор в сторону тяжелых периодов.