PDA

Просмотр полной версии : [Вопрос] Система сим-карт



execution
04.04.2021, 13:31
Не могу определиться как лучше реализовать систему.

Хранить заранее сгенерированные номера в таблице и затем при покупке отмечать как занятые?
Предполагается, что сим-карт можно покупать несколько, будут храниться как предметы в инвентаре. Может быть стоит рассмотреть вариант по поиску свободных сим-карт напрямую запросом в таблицу с предметами? Правда особо не нравится данный вариант, хотелось бы услышать мнения

tnc
04.04.2021, 14:12
Можно попробовать что-то подобное:


SELECT CONV(SUBSTR(UUID(), 1, 8), 16, 10) as phone_number

execution
04.04.2021, 14:22
Можно попробовать что-то подобное:


SELECT CONV(SUBSTR(UUID(), 1, 8), 16, 10) as phone_number


Не совсем понимаю, как она поможет?

tnc
04.04.2021, 14:26
Не совсем понимаю, как она поможет?

ну генерация симкарт

DeimoS
04.04.2021, 17:40
Да, лучше заранее сгенерировать таблицу с номерами и уже из неё брать номер. Лучше всего написать скрипт, который при старте сервера будет проверять количество свободных номеров и, в случае чего, генерировать новые.

Только аккуратнее с вытаскиванием рандомной строки из таблицы. Подробно изучи эту тему. Ибо можно намудрить такого, что MySQL, например, будет пытаться создавать временную таблицу, копировать в неё содержимое таблицы с номерами и только потом доставать оттуда строку.
Ну и с индексами не прогадай.

execution
04.04.2021, 18:41
Да, лучше заранее сгенерировать таблицу с номерами и уже из неё брать номер. Лучше всего написать скрипт, который при старте сервера будет проверять количество свободных номеров и, в случае чего, генерировать новые.

Только аккуратнее с вытаскиванием рандомной строки из таблицы. Подробно изучи эту тему. Ибо можно намудрить такого, что MySQL, например, будет пытаться создавать временную таблицу, копировать в неё содержимое таблицы с номерами и только потом доставать оттуда строку.
Ну и с индексами не прогадай.

Я себе как-то представлял так, чтобы сгенерировать один раз не радномые, а, например, xxxx-cellmax и по ним всегда ориентироваться, можно ли так сделать?

Так-же ещё интересовал момент.
Например, будет таблица simcards(хранятся все допустимые симки), затем при покупки симки, в этой таблице помечаю, что занято и добавляю новый предмет в инвентарь с номером карты.
Теперь мне необходимо вставить симку в телефон. В доп. поле телефона мне указывать ID симки? Чтобы в случаи слёта симок - можно было без фанатизма удалить симку из телефона

DeimoS
04.04.2021, 22:59
Я себе как-то представлял так, чтобы сгенерировать один раз не радномые, а, например, xxxx-cellmax и по ним всегда ориентироваться, можно ли так сделать?

Я имел ввиду уникальные номера, а не случайные.
Ну и да: лучше всё же написать скрипт, который будет проверять количество занятых номеров и периодически (при старте сервера, например) генерировать новые/продавать давно не использующиеся номера. Ибо особого смысла генерировать огромную таблицу сразу нет - это и лишнее пространство на диске впустую расходуется, и запросы будут замедляться. К тому же, всегда будет риск, что рано или поздно все номера в такой таблице станут заняты.

В любом случае нужно понимать, что если на сервер ежедневно будет заходить куча новых игроков или сервер просто просуществует долго и на него, опять же, успеет зайти много игроков, то такая таблица с номерами может нехило вырасти в размерах, из-за чего её придётся оптимизировать разными способами (например, партиционированием (https://dev.mysql.com/doc/refman/5.7/en/partitioning.html)), если ты не хочешь терять в производительности.


Так-же ещё интересовал момент.
Например, будет таблица simcards(хранятся все допустимые симки), затем при покупки симки, в этой таблице помечаю, что занято и добавляю новый предмет в инвентарь с номером карты.
Теперь мне необходимо вставить симку в телефон. В доп. поле телефона мне указывать ID симки? Чтобы в случаи слёта симок - можно было без фанатизма удалить симку из телефона

Лучше в самой таблице "simcards" создать поле, в которое будешь записывать ID игрока, повесив на него индекс. Ибо если информация о занятости номера будет хранится в таблице с аккаунтами, то выискивать свободный номер будет проблемно.
В самой таблице аккаунтов дублировать какую-то информацию нет смысла. Максимам, можно в таблице с инвентарём фиксировать ID столбца из таблицы "simcards" для предмета симки/телефона.