
Sergey
14.07.2018
17:52:36

Dmitri
14.07.2018
17:52:50
очередь
но ведь тогда бот будет долго отвечать?

marchwinks
14.07.2018
17:52:59

Sergey
14.07.2018
17:53:22

Google

Dmitri
14.07.2018
17:53:34

Sergey
14.07.2018
17:54:43
потом посмотрю и скажу как

.
14.07.2018
18:22:20
Оффтоп, простите, был бы рад ссылке на тематический чат. Как в ВК подтвердить валидность callback server'a методом АПИ (type confirmation) ?

Sergey❄️
14.07.2018
18:22:49
Там все написано
Нужно на запрос ответить какой-то уникальной строкой который даст сам вк

.
14.07.2018
18:25:33

Sergey❄️
14.07.2018
18:25:45
Там все написано

Mad
14.07.2018
18:28:34
Я правильно понимаю,если бот админ, то настройка privacy mode не имеет значения? А то я смотрю для моего бота включен privacy mode в настройках, но он успешно работает и получает сообщения в куче чатиков, где он админ.

Sergey
14.07.2018
19:03:35

Kirill "Loskir" ?¹³
14.07.2018
19:05:26

Sergey
14.07.2018
19:09:54
а тут в моде дело, ок понял

Google

Mikhail
14.07.2018
21:53:05
Вопрос по работе с бд. Есть игровой бот, в бд пишется результат по уровням (около 15-ти). Планирую сделать опцию /rank - выводящую место игрока по каждому уровню. Как это лучше сделать: select * from users и потом получать индекс игрока из отсортированного словаря для каждого уровня, либо кидать 15 запросов select top 20 from users и в каждом из них искать индекс?
С одной стороны, очевиден ответ, что если юзеров мало, то вариант 1, а если много, то 2. Есть какие мысли у кого, а то мне оба варианта не нравятся.


Defragmented
14.07.2018
21:55:03
Вопрос по работе с бд. Есть игровой бот, в бд пишется результат по уровням (около 15-ти). Планирую сделать опцию /rank - выводящую место игрока по каждому уровню. Как это лучше сделать: select * from users и потом получать индекс игрока из отсортированного словаря для каждого уровня, либо кидать 15 запросов select top 20 from users и в каждом из них искать индекс?
С одной стороны, очевиден ответ, что если юзеров мало, то вариант 1, а если много, то 2. Есть какие мысли у кого, а то мне оба варианта не нравятся.
Не писать в бд по уровням
Вместо этого сделать набор отдельных kv хранилищ, имя-индекс, имя-уровень

tEma
14.07.2018
21:57:15
или можно сделать одну таблицу где 15 столбцов с ранком и оттуда вытащить сразу по юзер айди все 15 штук

Kirill "Loskir" ?¹³
14.07.2018
21:58:55
Или юзать монго, если nodejs?

tEma
14.07.2018
21:59:31
монго можно ж не только с ноды

Kirill "Loskir" ?¹³
14.07.2018
22:00:19

tEma
14.07.2018
22:01:27
а у серверов телеги какое огранечение на количество запросов?

Mikhail
14.07.2018
22:02:03
Спасибо за ответы, но мой уровень владения вопросом не позволяет полностью их понять. Наверное, буду делать select *, так как юзеров мало и функция не предполагает частое использование.

tEma
14.07.2018
22:02:24
15 таблиц под каждый уровень?

Mikhail
14.07.2018
22:05:06

tEma
14.07.2018
22:06:55
mode1 mode2 mode3 это уровни?

Mikhail
14.07.2018
22:07:25

tEma
14.07.2018
22:08:58
ну вот делаешь ("select mode1, mode2 .... mode 15 from 'название таблицы' where user_id = ?", (update.user_id))
только там навзание столбца после where поставь свое и где апдейт сделай по человечески

Kirill "Loskir" ?¹³
14.07.2018
22:10:09

tEma
14.07.2018
22:11:01
у него написано что выводить должно место игрока по уровню
то есть я жму ранк я и получаю свой топ по всем уровням -_-

Mikhail
14.07.2018
22:11:15

Google

Mikhail
14.07.2018
22:12:07
Здесь либо много запросов на сортировку и вывод топа, либо получить все и крутить самому

tEma
14.07.2018
22:12:24
можно как то сортировкой я не умею так делать, у тебя питон?
помню похожее только чуть проще было мне подсказали
но вообще держать все все все в 1 таблице это не грамотно
особенно если ты рассширяться хочешь

Mikhail
14.07.2018
22:15:51
Да, есть такое
´SELECT username
FROM users
ORDER BY mode1_score DESC´
Тут же тупняк в том, что это нужно сделать для каждого столбца.

tEma
14.07.2018
22:16:55
ща думаю

Mikhail
14.07.2018
22:17:03

tEma
14.07.2018
22:18:09
чет башка не варит, но идея прям на можжечке вертится)

~/42/elrandir> ?ᅠ
14.07.2018
22:19:58
Что мешает джоинами получить то что нужно, с под запросами, для каждого топа
А потом оформит в яп подобающе?

tEma
14.07.2018
22:22:19
можно вот что то такое
тащить select user_id, mode 1, mode 2.....
у тебя получается если данные формата
((user_id1, 123 ,23, 0),(user_id2, 23 ,42, 213),(user_id3, 500 ,0, 1))
потом берешь и в цикле сортируешь
сортируешь все кроме user_id, потом делаешь еще один цикл в котором ставишь по местам, где смотришь на какой позиции стоит 123 из user_id1 и так далее
чет дичь, ночные алгоритмы
можно вот что то такое
тащить select user_id, mode 1, mode 2.....
у тебя получается если данные формата
((user_id1, 123 ,23, 0),(user_id2, 23 ,42, 213),(user_id3, 500 ,0, 1))
потом берешь и в цикле сортируешь
@mzanozin

Kirill "Loskir" ?¹³
14.07.2018
22:25:36
Это все дело на питоне же?

tEma
14.07.2018
22:26:21
ну у меня в голове на питоне? сделать можно, но нужно ли
может есть все таки какая то сортировка в sql или таблицы разделить

Mikhail
14.07.2018
22:27:40
можно вот что то такое
тащить select user_id, mode 1, mode 2.....
у тебя получается если данные формата
((user_id1, 123 ,23, 0),(user_id2, 23 ,42, 213),(user_id3, 500 ,0, 1))
потом берешь и в цикле сортируешь
Это и есть вариант 1. Им и собираюсь воспользоваться. Единственное, что не нравится, если будет много юзеров (маловероятно), то запрос может быть тяжелым.

Google

tEma
14.07.2018
22:28:20
нас тут за яп не ro-нут?

Mikhail
14.07.2018
22:30:02
Одна сотая от озвученной цифры. Поэтому, пожалуй, не буду больше утомлять вопросом.
Спрошу лишь, как бы ты организовывал подобное хранилище. В двух словах.

Mad
14.07.2018
22:30:20
сначала получаем score пользователя на каждом уровне
потом делаем 20 запросов вида
select count(*) from table where level=Y and score > X, где X это score нашего юзверя на нужном уровне
полученное число + 1 и будет позицией юзверя на нужном уровне
Ну и индекс должен стоять на пару (level, score)

tEma
14.07.2018
22:31:41

Mikhail
14.07.2018
22:32:19

~/42/elrandir> ?ᅠ
14.07.2018
22:32:55

Mad
14.07.2018
22:34:24
Если эту инфу часто будут дёргать, то есть смысл хранить позиции всех игровков по всем уровням в памяти и обновлять каждый раз, когда пришёл результат какой-то игры.

Mikhail
14.07.2018
22:41:30
Всем спасибо за мнения. Остановился на селект алл и сортировке в цикле с выборкой индекса.
Для себя понял, что надо почитать нормально про бд, а не на уровне сниппетов.

Mad
14.07.2018
22:42:28
Всем спасибо за мнения. Остановился на селект алл и сортировке в цикле с выборкой индекса.
А нафига? Проще же count(*) выбирать из бд, она уже за тебя отсортировала, елси, конечно, ты индекс поставил на колонку.

Mikhail
14.07.2018
22:48:09


Mad
14.07.2018
22:53:42
не нужен order by, ты знаешь что у твоего юзверя с id=13 есть 20 очков на втором уровне, чтобы узнать его позицию ты делаешь запрос
select count(*) from user_scores where level=2 and score > 20
Правда тут возникает проблема, это мы найдём кол-во юзверей, у которых очков больше, чем у заданного юзверя. А есть же ещё те, у которых такое же кол-во очков, вот там уже должна быть какая-то сортировка чтобы понять место юзверя среди юзверей с тем же кол-м очков
Ну можно такое условие сделать: ... and score >=20 and time_of_last_game > Z
где z это время последней игры нашего пользователя
Только придётся это всё в ииндекс пихать.


Mikhail
14.07.2018
23:01:42
не нужен order by, ты знаешь что у твоего юзверя с id=13 есть 20 очков на втором уровне, чтобы узнать его позицию ты делаешь запрос
select count(*) from user_scores where level=2 and score > 20
Правда тут возникает проблема, это мы найдём кол-во юзверей, у которых очков больше, чем у заданного юзверя. А есть же ещё те, у которых такое же кол-во очков, вот там уже должна быть какая-то сортировка чтобы понять место юзверя среди юзверей с тем же кол-м очков
Да, я тоже об этом подумал (кейс - одинаковые скоры). В целом, итог: можно сделать япом, можно запросом, но лучше грамотней составлять бд.
Если бы юзеров было много, то воспользовался бы твоим вариантом. Нет сомнений, что он будет работать, но при прочих равных, мне проще селект аллом.

Mad
14.07.2018
23:03:07
Не, если юзверей много, лучше в памяти кэшировать все эти позиции и обновлять по мере надобности и БД вообще не дёргать.
Думаю в redis должны быть какие-то подходящие структуры для этого

Serg
14.07.2018
23:24:45
индекс естесно строится по двум полям. Тогда и на миллионе юзеров запрос отработает моментально


Sergey
15.07.2018
00:18:23
почитай про декомпозицию и нормализация баз данных

Google

Павел
15.07.2018
07:45:14
че телебот под 3.7 еще не подогнали?

Евгений
15.07.2018
07:54:54

Sergey
15.07.2018
08:51:48

Павел
15.07.2018
08:52:05
да мне не горит)

Евгений
15.07.2018
08:55:38

Sergey
15.07.2018
08:56:06

Andre
15.07.2018
10:08:14
чёт у меня вдруг бот на telepot стал падать со следующей ошибкой:
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:833)
никто не в курсе, что за беда приключилась?

Sergey
15.07.2018
10:09:29
SSL: WRONG_VERSION_NUMBER