за такое не бьют (сильно).
Есть табличка MARKET:
(id, seller, item, price).
Юзается для рынка в игре, игроки выставляют товары, покупают и тд.
id - это у нас типичный Primary-key инкремент. В интерфейсе рынка, есть кнопочки, и у них под капотом такие команды *market check {id}*, *market buy {id}*
Но что меня кошмарит, так это то что покупок и выставлений товаров дофигища происходит, автоинкримент этот растёт, сначала там *buy 1*, потом *buy 1250202*, а через ещё месяцок команды превратятся в *buy 5912591259120512059125912*.
Под капот кнопок не засунуть много символов, там есть лимит и *market buy 99999999....* на определённом этапе уже выдаст ошибку. Да и в целом видеть этих гигантских id-годзил стрёмно.
Шо делать, как к этому подступиться, и как делают адекватные люди?
а почему в интерфейсе рынке выводятся айдишники из бд, а не например "Market buy Nice Item from player m22"?))
Например потому что этот player, мог выставить 15 таких Nice Item'ов
все равно не очень UX-ово, но ладно, я просто поинтересовался, вопрос не в этом
Не поняв. Юикс это же про пользовательский опыт и юзабилити. Может ты не понял, но игрок не видит команды market buy 5125912591959 Это всё внутри кнопки А видит игрок *🍎 Купить яблочко*
а, блин, сорян, на ночь глядя не вычитал "Под капот кнопок не засунуть много символов"
{"inline_keyboard": [[{"text": "💰 купить за 3900", "callback_data": "mbuy 389539950 206977"} во, если кратко, это телеграм кнопочка, в колбэк дата собственно команда. И у этого говна лимит на символы
а в вопросе реально идет речь о телеграмовской клавиатуре?)или это экстрасенсорика на такие вопросы уже сработала?
MINVALUE + MAXVALUE + CYCLE + следить чтобы старые удалялись до того как цикл до них по второму кругу дойдет, или при вставке обрабатывать и пропускать. https://postgrespro.ru/docs/postgresql/14/sql-createsequence
в случае с телеграмом можно при построении этого меню, вместо написания всей команды в кнопке, создать дополинтельную сущность с достаточно уникальным ID и хранить этот айди в кнопке по нажатию получаем коллбек, берем этот айди, находим соотвествие и выполянем нужную команду в таком методе нет ограничения на длинну команды пары <id кнопки, команда> можно хранить даже в редисе, как хэшмапу для каждого юзера отдельно
о, походу то шо надо, спасибо
Это уже какие-то лютые танцы с бубном Но тоже спасибо, ору
Обычно просто так обходят ограничение на длинну коллбек даты в телеграм ботах, пишут "сократитель ссылок в памяти"))
А вам принципиально чтобы идшники состояли только из цифр? Потому как если закодировать идшник в base64, то максимальное значение, которое можно поместить в bigint, займёт всего 11 символов. А до этого максимального значения вы и близко не доберётесь примерно никогда.
1) В то, что вы написали -- не превратится, поскольку максимум там на 6 цыфр (в миллион примерно раз) меньшэ. 2) Максимум там примерно 10 квинтиллионов. Если выделять по миллиону значений в секунду (вы столько не сможэте. Реалистичный лимит -- несколько десятков тысяч транзакцый на запись в секунду) -- то для того, чтобы забить все значения потребуется примерно 10 триллионов секунд, или 30 тысяч лет. Уверяю вас, когда этот срок начнёт подходить к концу -- вы что-нибудь придумаете.
Обсуждают сегодня