Реализация Черного списка

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28
Всем привет. Несколько месяцев назад начал осваивать базы данных. После того как я перенес все типовые действия со списками в базу данных, я увидел насколько списки тормозили работу зенки. Единственное действие, которое я еще не перенес - это черные списки.
Например у меня есть шаблон, который должен постоянно парсить юзеров со страницы сайта и находить новых(тут как раз и нужно проверять, есть ли данный юзер в ЧС), отправлять им сообщение и добавлять в черный список. Как такую логику организовать с БД? Конечно первое, что приходит на ум, это создать таблицу-черный список, куда добавлять всех отработанных юзеров. Потом через запрос
Код:
SELECT * FROM base WHERE user='blackusername';
проверять наличие данного юзера в таблице. Если ответ пустой, то юзра нет в ЧС. Но такой запрос занимает относительно много времени, особенно если база большая. И вроде как такой запрос в принципе не очень корректный. Можно сделать индекс на столбец user, но правильно ли это? Мне почему-то кажется, что при такой работе шаблон будет работать не лучше чем если тоже самое делать со списком. Кто как решает эту задачу? Может быть я слишком много загоняюсь или от недостатка знаний пытаюсь применить логику списков к БД?:ca:
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 942
Благодарностей
4 334
Баллы
113
Говорят с COUNT быстрее:
Код:
SELECT COUNT(user) FROM base WHERE user = 'blackusername'
 

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 719
Благодарностей
1 376
Баллы
113
SELECT t1.uid FROM base t1 LEFT JOIN blacklist t2 ON t1.uid=t2.uid WHERE t2.uid IS NULL
выберет из таблицы base все uid не содержащиеся в таблице blacklist
дальше думаю разберетесь
 

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28
SELECT t1.uid FROM base t1 LEFT JOIN blacklist t2 ON t1.uid=t2.uid WHERE t2.uid IS NULL
выберет из таблицы base все uid не содержащиеся в таблице blacklist
дальше думаю разберетесь
на крупных таблицах left join у меня работает очень долго
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 719
Благодарностей
1 376
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 606
Благодарностей
4 597
Баллы
113

anton08985

Пользователь
Регистрация
11.04.2019
Сообщения
93
Благодарностей
0
Баллы
6
если юзать апи в работе с зеной вместо бд? джет пост запрос получил, сохранил. как будет это вообще? или все таки воспользоваться лучше бд.
 

specialist

Client
Регистрация
28.12.2018
Сообщения
732
Благодарностей
343
Баллы
63
Не очень понял задачу, если это просто черный список - поле user сделать unique, работать будет очень быстро. Так же вместо MySQL использовать любое key value хранилище, скорость тоже будет отличной.
 
  • Спасибо
Реакции: Tsuk15 и Astraport

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28
Не очень понял задачу, если это просто черный список - поле user сделать unique, работать будет очень быстро. Так же вместо MySQL использовать любое key value хранилище, скорость тоже будет отличной.
Спасибо, об этом не знал
 

specialist

Client
Регистрация
28.12.2018
Сообщения
732
Благодарностей
343
Баллы
63
Вариаций очень много, даже файловый вариант в некоторых случаях подходит. Создаем текстовый файл с данными, например логи работы, проверка на существование в папке проходит достаточно быстро.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)