У меня есть три таблицы: пользователей с уникальным nickname
, более четырехсот Имен, 300000 плюс прилагательных и тонны возможных комбинаций.Создание большого числа уникальных случайных комбинаций
При подписке пользователь может создать уникальный, случайный и, надеюсь, смешной ник, объединив случайное имя со случайным прилагательным. Пользователь нажимает кнопку и Voilà! рождается волнующая личность.
Я выбираю случайные имена и прилагательные, выполнив два запроса для каждого:
SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM names/adjectives
и
SELECT * FROM names/adjectives LIMIT offset, 1
Затем я проверяю, если пользователь был достаточно неудачен, чтобы сформировать уже существующую личность.
SELECT COUNT(nickname) FROM users WHERE nickname=:generatedNickname
Если бы он был, бедный человек, я прокручивал его снова, пока он не оседает над чем-то незанятым.
Но, как вы, наверное, уже выяснили, рост базы пользователей также означает более длинные петли и больше пота из моего слабого EC2 Tier 1 Matchbox. Итак, я придумал блестящее решение: Что делать, если я предварительно создаю все возможные комбинации и набиваю их в огромную таблицу? Это позволит простую операцию по разрыву и воспроизведению, пока я буду потягивать волнующие мартини на каком-то анонимном пляже, или я? Будет ли мой скромный экземпляр LAMP дрожать и убегать при славном взгляде на огромные столы (как мужчины, так и женщины)? Есть ли лучшее решение?
Будете ли вы хранить комбинации по текстовому значению или как два внешних ключа для этих таблиц? 300K * 400 = около 120 миллионов комбинаций. Это не маленькая таблица, но если она содержит только два ints, тогда она управляема (скажем, где-то около пары гигабитов), - но вы действительно ожидаете, что так много пользователей, что среднее ожидаемое количество циклов когда-либо будет превышать 2? (это будет означать, что у некоторых пользователей 60M, если моя математика не слишком ржавая) – jkavalik
Но если вы все еще боитесь этого, тогда вы можете предварительно размножать тысячи комбинаций «в автономном режиме» (в ночное время) в такую таблицу, когда она становится «слишком пустой» "и использовать их, не нужно генерировать их все сразу. – jkavalik
@jkavalik Комбинации хранятся в виде текста. Нет, у меня никогда не будет такого количества пользователей. Идея о том, что вероятность столкновения невелика, тоже перешла мне на ум, но никогда не больно спрашивать людей, которые более опытные. Спасибо чувак! –