Задать вопрос
Ответы пользователя по тегу MySQL
  • Как раздавать уникальные записи таблицы во многопоточном парсере?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для мультипоточных систем самый лучший дизайн concurrency - это уменьшение concurrency. Есть разные способы уменьшения этого. Простое правило - это хеширование. Вычисляем хеш от урла. И берем остаток от деления на количество workers. Число в результате - сообщит нам номер воркера который будет эти линки обрабатывать. Другие воркеры будут чужие линки игнорировать.
    Ответ написан
  • Почему тормозит код записи в MySQL после разбивки его на функции?

    mayton2019
    @mayton2019
    Bigdata Engineer
    раскидал запись в каждую таблицу по функциям


    Подобного рода рефакторинги надо сопровождать кодом. Наиболее вероятный вариант - ты создаешь отдельный connection в каждой функции. Так делать не надо. Второй вариант - ты играешся с коллекциями там где нужны курсоры. Третий вариант - транзакции и блокировки но все это надо смотреть в твой код.

    Не мучай пожалуйста нас эпистолярным жанром. Давай код в студию едрён-батон...
    Ответ написан
    Комментировать
  • Существует ли тип данных List или Array в MySQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Смотри. Обычно реляционная алгебра рассматривает коллекции внутри ячеек как потенциальную проблему. Проблему денормализации. Если скин у тебя это сложный объект с другими свойствами и эти свойства вдруг (!) внезапно обрастают связями с другими сущностями БД - то тогда считается что БД плохо спроектирована. Невозможно отслеживать целостность. Или представь что какой-то скин ты решил удалить из системы. Тебе придется сделать поиск всех коллекций всех плееров и поискать его и удалить. И те-же проблемы с вставкой и обновлением.

    Но если ты никогда этого не будешь делать и тебе плевать на реляционные связи от скинов к другим элементам системы - то тогда можешь хранить в JSON. MySQL его поддерживает в угоду современным трендами на NoSQL.

    Хотя тема NoSQL - гораздо более обширная и сложная чем просто денормализация. Про нее можно говорить часами.
    Ответ написан
  • Как написать запрос?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я не знаю мне вот чего-то так режет глаза этот distinct.

    SELECT инструктор, дата, SUM(длительность)
    FROM ( SELECT DISTINCT инструктор, дата, начало, длительность
           FROM таблица ) AS алиас
    GROUP BY 1, 2


    Я рассуждаю так. Дата-начало-длительность - это величины. Их нельзя унифицировать. Инструкторы - можно. Но не в комбинации с измерениями. Если у вас данные - грязные - то почистите их и добавте unique. Просто гонять каждый раз унификацию - это как фильтровать фильтрованную воду. Дурная работа вобщемто.
    Ответ написан
    Комментировать
  • Как сделать запись на основе предыдущей?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Почитай про
    SELECT FOR UDPATE ...

    Точно не помню но кажется не все типы таблиц его проддерживают. Проверь что у тебя innodb.
    Ответ написан
    Комментировать
  • Как правильно распределить хранение комментариев?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужно материализовать ответы. И класть их на быстрое хранилище рядом с кешом типа nginx.
    Ответ написан
  • Как сделать чтобы mysql хранил таблицы в ОЗУ?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тюнинг БД это процесс бесконечный и интересный. Вот еще брат-близнец (или сестра) под названием Мария тоже имеет двигатель для memory https://mariadb.com/kb/en/memory-storage-engine/

    Есть там нюанс связанный с кнопкой Power. Так что будьте готовы к тому что это место - временное. Для кешей подходит разве что. Какую-то ценную информацию о финансовых транзакциях туда кидать нельзя.

    Еще если БД стоит на отдельном хосте - то какую-бы быстроту вы ни выжимали из таблицы - перед ней стоит сетевой стек который вносит свои законные милисекунды. Имейте это в виду.

    Вообще такая задача лучше ложится на структуры данных самого приложения. Поэтому - комменарий Дмитрия выше. Это звоночек о том что вы что-то не то делаете.
    Ответ написан
  • Как mysql/mariadb сортирует одинаковые значения?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В программировании различают понятие стабильная сортировка (stable sort) когда подряд идущие одинаковые ключи в массиве при сортировке также идут в той-же последвательности со значениями. Но это работает только для массивов.

    Реляционная алгебра не определяет никаких массивов. Собственно мы не знаем порядка как хранятся кортежи в таблице. Более того. Оптимизация пространства в БД может их тасовать как колоду карт. Тот-же вакуум в Постгресе. Или работа пакетов DBMS_SPACE для Oracle. Или любое delete+insert может сломать порядок который был раньше.

    Поэтому применительно к БД такой вопрос лишен смысла. Если вам нужен какой-то дополнительный ранг сортировки - вводите новое поле (sequence_num) и сортируйте по field,sequence_num. Тогда будет порядок.
    Ответ написан
    Комментировать
  • MySQL Master Slave не корректно работает?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть идея - заблокировать все прикладные учетные записи на slave. И создать их специальные теневые варианты которые дают доступ только read-only.

    Игры с созданием таблиц - это треш конечно. Надо просто расследовать инцедент с созданием таблиц и надавать плеткой по рукам. Тот кто это сделал - был частью системы. Он знал креды. Знал пароли.

    Создавать триггеры я думаю не стоит. Это просто какое-то избирательное решение, которое в будущем создаст только больше проблем.
    Ответ написан
    Комментировать
  • Как посмотреть таблицы?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Все бесплатные UI инструменты поражают своей убогостью. Мне после Toad/SQLDeveloper кажется что разработчики Windows-приложений просто разучились делать классические оконные апликухи. DBeaver - видел. Но на нем есть след толи Swing/AWT толи SWT со всеми вытекающими. Чувсвтуется что не родной.

    Автор если у тебя установлен mysql клиент - то можешь использовать консоль mysql. Бонусом будет то что научишся хорошей практике.

    Вот как-то так она выглядит.
    $ mysql --help
    mysql  Ver 15.1 Distrib 10.3.34-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Usage: mysql [OPTIONS] [database]


    Там и базы можно посмотреть и таблицы.
    Ответ написан
    Комментировать
  • Чем посмотреть MySQL базу под windows10?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Такие задачи я делал просто в текстовых редакторах. Надо только найти тот который загрузит файл на 1.4Гб.
    Попробуй Notepad++. Потом визуально можно просто отметить номера строк для резки. И уже порезать консольными утилитами типа head/tail

    Если вообще не осилил - тогда качай докер. Потом mySQL https://hub.docker.com/_/mysql Ну и дальше погнал. Загружай.
    Ответ написан
    Комментировать
  • Как оптимизировать запрос с подзапросами с COUNT?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот эта колбаса - по смыслу - group-by с фильтрацией. Попробуй сделать из 3 запросов 1.
    ,(SELECT COUNT(comment_system.id) FROM comment_system WHERE itemtype='qqq' AND item_id = ebids.id) AS has_qqq_comment 
      ,(SELECT COUNT(comment_system.id) FROM comment_system WHERE itemtype='www' AND item_id = ebids.id) AS has_www_comment 
      ,(SELECT COUNT(comment_system.id) FROM comment_system WHERE itemtype='eee' AND item_id = ebids.id) AS has_eee_comment
    Ответ написан
    Комментировать
  • В БД MySql суммируется столбец значений, как правильно сделать, чтобы время обработки запроса сократить?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если это - бизнес факты и таблица - PARTITION BY RANGE по дате - то можно суммировать только за последний день. Ну и предыдущие - просто хранить как результат суммы.
    Ответ написан
    Комментировать
  • Что быстрее поиск по файлу JSON в PHP или в базе посредством MySQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Недавно я смотрел доклад Бартунова (это один из ведущих разработчиков Postgres в РФ ), вобщем он хвастался, что на поисковых операциях по Json , pg быстрее чем MongoDb.
    Ответ написан
    Комментировать
  • Математические операции в значении столбца бд MySQL по умолчанию?

    mayton2019
    @mayton2019
    Bigdata Engineer
    А зачем во всю таблицу прописывать магическую дату которая к тому-же равна какому-то NOW?
    Уж лучше оставить null. Так хотя-бы места в индексах не будет занимать. Да и вообще.. null в базах несет особый смысл.

    Вобщем создатели диалекта MySQL были по своему мудры и не дали возможности ленивому разработчику просто так мусорить в таблицах.
    Ответ написан
  • Где и как лучше создавать базу данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Порадовала фраза:
    Я хочу применить свои навыки (mysql, postresql docker, python) в текущей работе.

    Со стороны выглядит как - у меня в руке молоток и хочется повбивать как можно больше гвоздей :)

    По теме вопроса и по задаче инвентаризации. Не существует общего шаблона как это делать. Тоесть ты можешь брать любую БД из списка и любая подойдет пока нет требований по фичам например (Postgres поддерживает географические типы данных (линия-точка-полигон) но вряд-ли тебе такая специфика нужна).

    По Python - что есть то есть.

    По виртуализации. Если у тебя есть контейнеризация где всё работает - то виртуализация тебе нафиг не нужна. Виртуализация вообще это продукт который давно устарел. Да и нерационален он в части ресурсов. Поэтому бери docker (compose а лучше kubernetes). И поднимай там сразу всю инфраструктуру. Кстати это автоматически закрывает вопросы всяких выделенных линуксов.
    Ответ написан
  • PHP не создаёт запись MySQL, ошибки не выводит, что делать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    mysqli_query возвращает статус ошибки. Посмотри вот как тут пишут https://www.php.net/manual/ru/mysqli.query.php

    И сделай проверки результата.
    Ответ написан
    Комментировать
  • Как использовать переменную в названии столбца?

    mayton2019
    @mayton2019
    Bigdata Engineer
    SQL изначально создавался как язык для бизнеса. Тоесть не для программистов, а для людей которые заняты обычной деловой денежной активностью.

    Но если ты - счастливый обладатель PHP или Node языка то ты можешь динамически создавать любые тексты SQL и подставлять туда имя столбца из любых переменных языка. Благо string interpolation есть почти во всех языках. Например в PHP:

    $sql = "SELECT ${VAR} FROM `table`"

    Мне кажется этого достаточно для решения задачи.

    И не стоит на SQL навешивать сложные смыслы.
    Ответ написан
  • Можно ли оптимизировать запрос?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно использовать inline views (или еще называют common table expressions)

    with cp_view as (
     select cp.chat_id
     from chat_participants cp
     where cp.user_id = 1 and cp.is_deleted = false)
    .....
    Ответ написан