Задать вопрос
Ответы пользователя по тегу MySQL
  • Как добиться баланса между скоростью и производительностью при импорте ~200к строк в базу данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    1) 200k строк это вобщем-то мало для современных БД
    2) Загрузи как есть в новую таблицу вот как тут пишут
    https://stackoverflow.com/questions/14127529/impor...
    3) С помощью alter add column добавь нужные колонки и обнови через UPDATE.

    Никуда больше копать не надо. Загрузка данных - уже 30 лет как решенная коробочная задача.
    И ее делают встроенные в БД утилиты и сама БД если если ей доступен диск с csv-файлом.

    Никакой ORM тебе тоже не нужен. ORM вообще - противопоказан для задач аналитики и ETL.
    Ответ написан
    9 комментариев
  • Почему скрипт не понимает, что данные в MySql изменились?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Первым делом надо доказать отсутсвие глупых ошибок. Типа вместо продуктовой БД пошел в тестовую.

    Сделай этот-же запрос из mysql консоли

    mysql> SELECT flag FROM designbase WHERE id = 501285409


    И попробуй для 2 исходника включить автокоммит как тут пишут https://mariadb.com/kb/en/mysql_autocommit/
    Ответ написан
  • Как правильно соединить при выдаче 2-3+ разных таблиц с одинаковой структурой в единую выборку?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно UNION автоматически делает distinct для всех таблиц-участников процесса union.
    Это является причиной замедления.

    Используй UNION ALL.
    Ответ написан
    3 комментария
  • Общий доступ к данным хранимым в MySql?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если говорить о pet-проектах то нагрузка там маленькая. MySQL можно поднимать локально или в локальном докере.

    Реальная потребность во внешнем хостинге обычно идет от реальных задач. Тоесть от задач которые приносят деньги. И поэтому обсуждать бесплатные хостинги с негарантированной полосой - нет смысла. Они все равно будут хуже чем платные. Это мой опыт работы с Amazon. Все бесплатное - нихрена не работает. Не поддерживается. А если ищете поддержки - начинайте платить.
    Ответ написан
    Комментировать
  • Какова синтаксическая ошибка MySQL?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Наверное не value а values
    INSERT INTO books (title, author, price, quantity) values
    Ответ написан
  • В каком виде, хранятся записи в БД, подобные постам в соц.сетях?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Современная соц-сеть - это уникальная софтварная архитектура которая строилась индивидуально.
    Вряд-ли вы сможете ее просто повторить имея mysql/php/nginx.

    VK/Facebook имеют свои технологии кеширования контента в основном построенные на материализации
    страниц. Базы данных обычно - не-реляционные. Модель проектируется так чтобы не было joins между
    таблицами. И активно используются очереди сообщений. Вот в соц-сети Linked-In это было настолько
    важно что даже был создан отдельный программный продукт который сейчас называют Apache Kafka.

    Активно используются горизонтальное масштабирование. Сеть наращивает мощности просто путем подключения
    новых адресов в dns с балансом по географии, и запуска новых web-nodes и новых дисковых реплик хранилищ для картинок и текстов постов.

    Поэтому вопрос в каком виде хранятся записи - тут не важен. Тут важно чтоб кеши обновились синхронно с событием поста например.
    Ответ написан
    7 комментариев
  • Как увеличить скорость загрузки данных в Mysql?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть базы данных, весит примерно 40 гб. Нужно его восстановить на свой сервер

    Оптимизация сильно зависит от того в каком виде лежат исходные данные.
    И какой engine включен у таблицы и есть ли какие-то обвсесы у таблицы которые замедляют
    ее вставку. Например индексы, триггеры и констрейнты.

    (я достигал резкого увеличения скорости загрузки когда переключал engine с InnoDb на MyISAM.
    Это было давно. И как щас я не знаю. Может щас появились новые engines которые лучше чем
    MyISAM. Надо читать. Но на тот момент мне транзакции были безразличны. Нужно было просто
    хоть как-то загрузить данные и MyISAM помог).

    Очень хорошо грузится CSV в пустую свеже-созданную таблицу без ничего. Даже не надо объявлять PK.. Лучше потом его активировать и также добавить констрейнты в режиме no check.

    UPD:
    Ответ написан
    Комментировать
  • Как узнать процент похожести текста?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне кажется что для обобщения надо все таки новую статью добавить в MySQL. Чтоб API проводящий сравнение хотя-бы был единообразным.

    И наверное есть много способов решать эту задачу. Но она по своей природе близка к полно-текстовому поиску хотя-бы потому что слова и их комбинации могут отличаться. Могут быть переставлены местами. Могут быть с опечатками. С переносами в середине слова.

    Насчет Sphinx - ничего не скажу. Не использовал. Но в классическом текстовом поиске все слова хешируются в 18-20 битные числа. Потом гистограмма. И дальше эти векторы можно быстро сравнивать. (там еще слова чистятся. удяляются предлоги. приводятся к единой форме). Это теория. Как это реализовано в MySQL - я ХЗ. В Postgres это точно есть. Один чел выше уже написал.
    Ответ написан
    Комментировать
  • Подойдет ли mysql для работы с aiogram?

    mayton2019
    @mayton2019
    Bigdata Engineer
    При 700 наверное вообще любая БД подойдет.
    Но тут надо еще отметить что архитектура БД выбирается исходя из наиболее типичных запросов.
    Например для установления дружбы между людей в соц-сетях и для принятия маркетинговых решений
    берут графовую БД. Для хранения сета вариативных документов - берут Mongo. Для финансовых транзакций
    с историей - берут классические реляционные типа Oracle/PG.
    Ответ написан
    Комментировать
  • Насколько сильная разница между запросами * и `id` в MySQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Лучше звездочку не использовать по двум причинам.

    Первое - это объем сетевого трафика. Если в таблицу будет добавлено 4 поле например типа BLOB и туда
    будут вставлять картинки - то при каждом select * ... картинка будет транслироваться по сети даже если
    она вам не нужна.

    И второе - просто неожиданно поведение софта, который ожидает поля именно в этом порядке
    id, name, balance
    если кто-то захочет поменять тип данных name например - то он сделает drop column name, а потом
    создаст новое поле alter table add column .... то в таблице они лягут в заголовок уже в новом порядке
    id, balance, name
    Какие будут последствия - чорт его знает но ничего хорошего для автоматизированных систем ждать
    не стоит.

    Вобщем всегда указывайте явно поля.
    Ответ написан
    Комментировать
  • Что надо знать для размещения сайта и работы с данными?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Надо ли учить PHP и MySQL?

    Считается что PHP/MySQL относятся к "морально устаревшему" стеку технологий (LAMP (lin+apache+mysql+php).
    (Я думаю что знания MySQL полезны. Это лучше чем "никакой" SQL.)

    На смену ему должен был выйти лет 7 назад MEAN (mongo+nodejs+....e.t.c.).
    Мне уже поздно переходить в MEAN. Слишком стар. Но я-бы перешел просто потому что это
    более новый взгляд на старое. Новое - всегда лучше чем старое.

    Учу веб-разработку для фриланса - делать сайты на заказ (знаю, что рынок супер конкурентный). По книжкам выучил JS, HTML, CSS, базовый jquery (*тут могла быть ваша шутка*), к фреймворкам и библиотекам пока не приступал.


    По поводу "размещать сайт". Это вообще не твоя основная цель. Цель - набить руку в системе.
    Для этого тебе не нужно иметь свои хостинги. А нужно просто влиться в систему которая уже
    их делает в режиме конвейера.

    По поводу "выучил по книжкам". Ты не выучил еще ничего. И дело даже
    не в техниках верстки. А ты пока не понял как работает процесс коллективной разработки софта.
    Это сложно. Это интересно и эффективно. И ты будешь эффективнее в команде а не во фрилансе.
    Работа в команде - это не только код. Это согласование ТЗ. Документирование.
    Скрам-процессы. Корпоративная этика и кодекс поведения. Это как лак для дерева.
    Ты - пригож для всех корпораций после этого. А во фрилансе хоть 40 лет просиди.
    Никто характеристики не даст и не впишеться.

    Поэтому лучше пойди в корпорацию. Покрутись несколько лет. Получи своё видение. И потом
    уже во фриланс если будет желание.

    Хочу понять, насколько глубоко надо лезть в бэкэнд

    На этот вопрос сложно ответить. Ты скорее сам почувствуешь. Опять-же после опыта в корпорации.
    Кстати и развиваться можно внутри корпораций вполне себе хорошо. И курсы и тренинги и сертификация.
    ИЧСХ тебе корпорация их и оплатит.
    Ответ написан
    Комментировать
  • Можно ли написать SQL запрос с выражением в WHERE и в SELECT, но без повторения этого выражения и без вложенного SELECT?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В SQL - много таких особенностей. Тоже самое с group by и оконными фунециями. Надо много повторяющихся expressions написать.

    Попробуй еще так написать.

    WITH HT AS (
     SELECT `product_id`, MD5(`value`) AS myhash
      FROM modx_ms2_product_options
      LIMIT 10
    )
    SELECT * FROM HT WHERE `myhash` = 'e59253548ffcb090ecc0cd0944afd27f'
    Ответ написан
    Комментировать
  • Стоит ли добавлять index для полей таблицы EAV?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Стоит ли добавлять index для полей таблицы EAV?

    Добавляй конешно. Если ты уже докатился до такого состояния что затащил EAV.
    Но это - вопрос не к Qna а к тебе. Ни один архитектор не умеет прогнозировать время
    исполнения запроса. Это - слишком шумящая и слишном сложная формула. А знать ее можешь
    только ты сам после нагрузочного тестирования. Загрузи фейковые данные. Смоделируй без индекса
    и с индексом.

    Ну... по возможности подумай о том чтоб как-то уйти от EAV и заменить характеристики
    товара JSON-документом.
    Это - эволюционный путь и все к этому приходят.
    Ответ написан
    4 комментария
  • Зачем именно нужны связи в бд?

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

    insert into message(9999999, -1, "Mua-haha...");

    И у меня есть пост от анонимоса который не зарегистрирован как пользователь.

    Разумеется можно полагаться на логику твоего приложения и думать что такая ситуация невозможна
    но с точки зрения БД она вполне возможна потому как родственная связь User + Message нигде не объявлена.
    И SQL позволяет это сделать.

    Чтоб поправить ситуацию надо эту связь добавить и тогда я не смогу создать фейковые посты от анонимосов.
    ALTER TABLE Message
    ADD FOREIGN KEY (userid) REFERENCES users(id);

    По умолчанию констрейнт создается с опцией restict (это было в Оракле как в Майскл - не знаю)
    и это гарантирует что невозможно также удалять родительские записи пока есть дочки.
    Для скорости ссылочные ключи всегда - индексированы.

    Рассуждать на тему вреда от аномалий - это просто терять время. Каждый владелец БД сам решает
    какие уровни строгости ему вводить. Вообще любая теория касаемая БД - по сути просто развивает
    идею строгости НФ1,2,3,4,5,6 и ссылочных ограничений.

    Будет ли виден пост от анонимосов - это тоже другой вопрос и он не имеет отношения к обсуждаемой
    теме. Ведь тема касается именно логичности данных в БД а не тем методам которые их отображают.

    По сути вопрос сводится к тому как не создавать мусор в БД.
    Ответ написан
    2 комментария
  • Как испровить медленный запрос к базе данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Из быстрых советов - проверь что Subdivision_ID проиндексирован.
    Ответ написан
    Комментировать
  • Как убрать binlog mysql?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для начал посмотри что в них внутри. Вот как тут пишут https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlo...
    Может это и не ты накрутил а просто новая версия прикладного софта работает. Что-то обновляет интенсивно.
    Ответ написан
    Комментировать
  • Большая БД, лучше разместить данные в другой базе или таблице?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут - невозможно ответить лучше или хуже. Если в базе нет проблем от ее
    размера - то пускай себе исторические данные лежит в основной базе.

    Если трудно делать backup - то можно поместить в другую БД. Но тогда нужно придумать
    новое техническое задание на поиск в друх базах сразу.

    Если просто медленно работает поиск - то можно сделать partitioning по периодам (годы, кварталы или месяцы)
    и попросить программистов сделать настройку запросов с учотом partitioning.
    Ответ написан
    Комментировать
  • Можно ли сделать дамп MySQL БД из консоли Linux, исключив из него определенные поля определенных таблиц?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Скорее всего такого готового функционала нет. Но любой думающий девопс или dba сможет
    сделать семейство скриптов которые делают полный экспорт во временную базу и потом
    в этой временной БД делают drop column ... или лучше update set = null. И еще раз полный
    экспорт в файлы.

    Эти скрипты вобщем делаются быстрее чем мы здесь сидим и обсуждаем. Поэтому
    не ждите. Начинайте делать.

    UPD:
    Ответ написан
    2 комментария
  • 1 или 2 сущности для регистрации?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Если они связаны 1:1 то соедини их в одну табличку и все.

    UPD: Автор если ты сомневаешся - то лучше не делай. На все технические вопросы тут ответят.
    Но риски - это дело твоё. Похлопывать тебя по плечу или давать санкции на авантюры - никто не будет.
    Если ты отвественный за БД и уверен в себе - то иди и делай.
    Ответ написан
    Комментировать
  • Можно ли переносить данные базы данных через phinx?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Типа можно накатить изменения и также безопасно откатить.

    По поводу безопасного отката. Это на 99% зависит от SQL кода который вы напишете. Это никак не связано с фреймворком поддержки миграций. Берите какой угодно фреймворк. Например liquibase или flyway.

    И даже в них если во время alter table rename column вы столкнетесь с активными сессиями в БД - то ваша транзакция переименования упадет и вы будете вручную решать ситуацию отката или наката.

    Безопасность наката и отката также зависит от грамотности описания ваших чендж-сетов. Бывает так что в 1 чендж-сет запихивают 2 DDL команды и одна из них проходит а вторая не проходит и фреймворк повисает навсегда в клинче. Двигаться назад он не может т.к. Не был применен чендж-сет. И двигаться вперет тоже не может т.к. первая DDL команда уже выполнена и повторо ее вызывает ошибку типа "table/index already exists".

    Выводы - грамотность описания чендж-сетов. И все.

    Ваш фреймворк phinx выглядит ужасно с точки зрения кода. Как по мне он не делает главной задачи а именно - не является DSL для upgrade/rollback. Он - прибит гвоздями к PHP и следовательно его можно рассматривать только под углом вашего PHP-удобства. Удобен он вам? Используйте.
    Ответ написан
    Комментировать