Задать вопрос
Ответы пользователя по тегу MySQL
  • Что лучше, по одной или несколько записей при INSERT?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Имеется система логов, которая довольно часто вызывается, при пиковых значениях достигает до 30-40 записей в секунду. Использую engine ARCHIVE, сервер MariaDB, подключение по unix сокету.

    Имеет ли смысл собирать кучу данных допустим 50 записей и потом одним запросом добавлять 50 записей.

    Смотри. Писание логов в Марию - это как по мне лишнее. Оверинжинеринг. В наше время логи собирают logstash-ем и пишут в Кибану. Там для каждого формата есть свой парсер. Для Ninx, Apache e.t.c.

    Если тебе прям сильно-сильно надо писать логи в реляционную систему (очевидно что-то джойнить с логами) - то пиши максимально большой пачкой. Хоть 1000 штук. Сколько позволяет размер фрейма в этом unix socket. (Кстати какой он там?) А чорт его знает. Но.... если ты записал 999 записей а последняя еще не пришла, а тебе срочно нужно глядеть в базу - тогда делай периодически сброс по времени. Например через 3 секунды от начала пачки ты будешь делать insert независимо от того сколько строк накопил.

    Вот так.
    Ответ написан
    Комментировать
  • Есть способ с помощью Mysqli одним махом засунуть JSON в базу?

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

    Потом загрузить это в spark dataframe
    Using Scala version 2.12.15 (OpenJDK 64-Bit Server VM, Java 11.0.17)
    Type in expressions to have them evaluated.
    Type :help for more information.
    
    scala> val df1 = spark.read.json("/tmp/emp.json")
    df1: org.apache.spark.sql.DataFrame = [_corrupt_record: string]

    И имея фрейм либо сохранить в CSV либо подключить драйвер JDBC записать прямо в базу.

    Еще во фреймворке Pandas есть опции загрузки из JSON. Но я сам не спец в пандасе поэтому
    точно как сделать не скажу.

    Вот. Еще я помню где-то писал утилиту чтоб произвольные JSON конвертить в JSON-lines.

    Короче способов - масса. Беда как обычно в вопрошающем. Что он готов для этого установить
    и что выучить.
    Ответ написан
    Комментировать
  • Как сделать массив int в таблице?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Массив можно сделать через JSON тип. По крайней мере MariaDb его поддерживает. Может и MySQL тоже имеет.

    Хранить его в пользователе я-бы не советовал. Лучше создать отдельную таблицу типа sessions или какие-то юзерские активности и складывать туда связку session_id + user_id + JSON с корзинкой. Причем добавить обязательно TTL хотя-бы на неделю. Чтоб рассеянные пользователи не заполняли мусором таблицу.
    Ответ написан
    Комментировать
  • Как узнать позицию записи в базе?

    mayton2019
    @mayton2019
    Bigdata Engineer
    База это не Excel лист. И записи в таблице БД хранятся разбросанные в случайном порядке. Порядок появляется когда мы делаем SELECT c order by. В остальных случаях порядок не гарантирован.
    Ответ написан
    1 комментарий
  • Как сделать запрос в запросе в SQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Order by стоит не там. Вообще если хочешь в одном SQL запросе использовать несколько изолированных - то
    попробуй Inline Views (или еще их называют common table expressions). Типа такого

    WITH T AS (SELECT * FROM EMPLOYEE WHERE dept = 'Sales')
    SELECT * FROM T WHERE name = 'Ava';
    Ответ написан
    Комментировать
  • Как создать порядковый номер для заказа конкретного заведения?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Откажитесь от порядкового номера. Создайте код типа номер заведения + дата-время. И это будет коробочное решение вашей проблемы.

    Все трюки с блокировкой таблицы могут параллизовать ваш бизнес. А зачем вам это надо?
    Ответ написан
    2 комментария
  • Как стоит организовать хранение данных mysql?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Скорее всего тебе нужно 2 таблицы. Users и Tasks. Вторая - дочерняя и таким образом у одного юзера есть несколько тасков или ни одной.

    Это называется Нормализация БД.
    Ответ написан
    Комментировать
  • Что быстрее: select и update или просто update?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Делай просто update. Проверка не нужна.
    Ответ написан
    Комментировать
  • Какой приоритет у OR?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если не знаете приоритет - то всегда можно поставить скобки. Это решает проблемы и не несет накладных расходов.
    Просто код становится на 2 символа длиннее.

    SELECT ..... FROM .... WHERE (CODE: `id` = value OR `code` = value) .... other predicates....


    Update:

    Если тебе надо гарантировать что поле не пустое - то добавь еще один предикат IS NOT NULL.
    Ответ написан
    9 комментариев
  • Почему много промахов в кэш MyISAM, когда в БД только InnoDB?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я не понимаю. Расследование инцидента в БД так не делается. Нельзя прийти с утра и, посмотрев в промахи Кеша делать выводы. В любой крупной БД промахи есть.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    2я таблица - должна быть view по отношению к первой.
    Ответ написан
    Комментировать
  • Есть ли разница для скорости работы БД при установке типа text, а не varchar 128?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Лимиты на текстовые поля - это архаизм и пережитки старины далёкой. Они имели большой смысл для DBase, Clipper, FoxPro но для современных БД практически уже неактуальны. Можно брать text.
    Даже Oracle вобщем-то снял лимит 4000 байт на строку и настройками системных параметров можно его растянуть хотя-бы в 32 килобайта.

    Тем более что в поля все чаще кладут semi-structured информацию (JSON/XML e.t.c).

    Но вы можете их использовать просто как констрейнт чтобы акцентировать внимание что поле имеет особый вид строки. Например хеш SHA-256 или какой-то ключ или UUID.

    Поддерживаю Дмитрия в наблюдении за oversized attribute.
    Ответ написан
    Комментировать
  • Можно ли индексировать varchar в mysql?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Все int я индексировал

    Вот ты чудак. Надо не все индексировать а только те которые оптимизатор запросов может выбрать в плане запроса.
    Ты кстати еще получишь обратную связь в виде замедления update/insert/delete на такой чудо-таблице.
    Оптимизация - это искусство. И тут нельзя так... приходить и ВСЁ индексировать...
    Ответ написан
    Комментировать
  • Чистый php, если нет Бд, то можно ли её создать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно эволюция кода идет синхронно с обновлением схем в БД. Для этого есть инструменты типа liquibase/flyway. Они приводят в БД в состояние полного синхронизма с вашим репозитарием кода. И то что у вас происходит (нет таблицы) - это ужас-ужас и надо срочно что-то менять в жизни.

    Вот так. Развивайтесь. Взрослейте. Хватит уже бегать в детских штанишках. Хорошая система должна трекать свои изменния. Берите лучшие практики которые есть сегодня. Создание таблицы в секции catch - это опасная практика которая кроме того вызывает еще один парадоксальный вопрос из серии - а что делать если exception возник внутри секции exception и так далее.
    Ответ написан
    Комментировать
  • Возможно ли одним запросом разрешить null во всех столбцах?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Скорее всего тебе придется ходить по всем колонкам и делать alter table ... change|modify ...
    Ответ написан
    Комментировать
  • Как вставить данные в две таблицы сразу?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот так.
    START TRANSACTION;
     INSERT INTO tab1 ....;
     INSERT INTO tab2 ....;
    COMMIT;

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Два действия полностью противоречат друг другу.

    Оптимизирую сайт по скорости загрузки

    Добавляем индекс по полю publication


    Во время интенсивной загрузки индексы и триггеры и констрейнты мешают. Их выключают обычно.

    Вообще чтоб дальше продолжать обсуждать - надо задать много вопросов. Что вы делаете вообще? Вы 1 раз загружаете или каждый день будете загружать?

    Это одноразовый запрос
    SELECT COUNT(*)
    или будете каждый день его дёргать?

    Все эти вопросы важны чтобы понять в какую сторону вы хотите улучшать. Оптимизация БД - это система компромиссов. Вы в одном месте что-то отключаете или наоборот включаете чтобы получить перформанс. Но вы теряете что-то в другом.
    Ответ написан
  • Реализация автоматического обновления БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если в нерабочее время - то можно было-бы убивать тестовую базу ночью. Копировать все датафайлы продуктовой. И стартовать ее снова. Ну там.. внеся какие-то косметические изменения в конфиг если надо.

    Это самый быстрый способ IMHO. Но я его использовал под Oracle. Как будет комфортно для MySQL - чорт его знает.
    Ответ написан
    Комментировать
  • Оптимизация структуры БД. Какие варианты в данном случае?

    mayton2019
    @mayton2019
    Bigdata Engineer

    Перетащил это всё на MongoDB с такой структурой:

    Справочники остались в MySQL.
    .......
    Какие есть идеи?

    Думаю попробовать перенести структуру на PostgreSQL аналогично MongoDB и использовать

    Дружище. Так жеж не делается в мире Документно-ориентированных БД! В монге ты делаешь не таблицы. А хранилища документов. Где каждый документ - самодостаточен и полностью хранит в себе всю информацию. Грубо говоря никаких СПРАВОЧНИКОВ и СВЯЗНЫХ таблиц у тебя быть не должно. И нельзя джойнить документы. И нельзя джойнить документы с таблицами MySQL.

    Почитай про модель АГРЕГАТОВ в противовес реляционной модели. Это можно найти в книжках типа NoSQL и еще я находил это в доках по Cassandra.
    Ответ написан
    1 комментарий
  • Как соотносятся между собой mysql и mariadb?

    mayton2019
    @mayton2019
    Bigdata Engineer
    почему при работе в командной строке я продолжаю подключаться через mysql -u -p

    MariaDb поддерживает тот-же сетевой протокол что и MySQL.
    Ответ написан
    Комментировать