Задать вопрос
Ответы пользователя по тегу MySQL
  • Не редактируется БД через PHP. Что делать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Попробуй сделать
    autocommit(TRUE);
    Ответ написан
    Комментировать
  • Зачем надо закрывать курсор при работе с БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Дело в том что курсор может потреблять ресурсы. Например вы захотели взять первые 10 строк из 10000000 выборки но предварительно отсортировали. Выбрали 10 строк и не сделали финализирующие протокольные действия в Python. База данных будет удерживать в памяти алгоритмы и структуры данных для снапшота результата этого запроса до тех пор пока не придет явный CLOSE с вашей стороны либо интеллекуальный драйвер который еще и обладает логикой уборки мусора сам не догадается что Statement уже вышел из scope вашего использования и может быть удалён GC.

    Я был свидетелем ситуации когда крупное ent-приложение Java/Oracle переполняло память из-за неверной обработки Exception и плодила много незакрытых курсоров в БД. Java от этого не сильно страдала (GC всё убирал) но страдал Oracle. Потому что уборка происходила слишком поздно. Пофиксилось тогда переписыванием с try на try-with-resources.

    Поэтому если вы неряшливо обращаетесь с курсорами (явными и неявными (обычный select к примеру может прождать неявный курсор)) то не ваше приложение а база данных почувствует себя плохо. Как быстро и какие ошибки вы будете получать - зависит от настроек вашей БД.
    Ответ написан
    Комментировать
  • Как с помощью ORM сделать запрос на готовую базу данных Nest JS?

    mayton2019
    @mayton2019
    Bigdata Engineer
    У тебя - в тексте вопроса - какая-то страшная путаница. Наверное подключаться надо не к NestJS а к MySQL с помощью TypeORM.

    Вот тут есть пример с подключением https://docs.nestjs.com/recipes/sql-typeorm#sql-typeorm

    И разберись с терминологеий. Нельзя ж так набрасывать просто слова.
    Ответ написан
  • Как ускорить импорт из XML в MySQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    - Предположительно, тебе загрузку замедляют 2 индекса по id, uuid. Выключи их. Потом построишь когда загрузишся.
    - У тебя - MariaDb. Модная зверюга. Попробуй мнесто InnoDB поставить другой двигатель Aria например.
    Ну и проверь там чтоб XML и датафайлы лежали на физически разных дисках во время загрузки.
    Ответ написан
    6 комментариев
  • Как перенести Data на сетевой диск?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Скорее всего не будет работать. NAS может обеспечить throughput, но не IOPs.

    Это одна причина. И вторая - протокольная. Если Mysql все таки запрашивает какую-то операцию которая характерна только только для локального диска (fsync) то что будет если мигнет сеть ? Это фатально для базы. Я не знаю как она среагирует, но это равносильно выдергиванию SATA диска из шлейфа.
    Ответ написан
    Комментировать
  • Как удалить запись из БД после запроса?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Такого в БД обычно не делают. Есть понятие temporary table. Ее создают один раз. А данные в ней лежат либо на время сеанса (connection) либо на время транзакции. Это конфигурится при создании таблицы. Только командой к очистке будет не select а неявный commit.
    Ответ написан
    Комментировать
  • Как оптимизировать запрос в mysql?

    mayton2019
    @mayton2019
    Bigdata Engineer
    6 секунд - нормальная себе скорость. Тем более что вы пользователю хотите аж 3000 строк показать.
    Да он их читать будет целую неделю.
    Ответ написан
    Комментировать
  • Массовое сравнение сток, поиск пересечений, каким инструментом воспользоваться?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Коробочное решение - это библиотеки обработки текста Apache Lucene, Sphinx. Но их нужно программировать - следовательно вам надо искать разработчика.

    ElasticSearch/Solr (под капотом это тот-же Lucene) - вариант но вам надо будет его конфигурировать и тщательно подбирать настройки Analyzer чтоб не получать ложно-позитивных срабатываний. Возможно в дефолтном варианте он слишком умный и делает стемминг там где не надо.

    Если самостоятельно программировать то мы имеем такую complexity : 100 000 слов проверить в 150 текстах - это примерно 15 миллиардов тривиальных проверок. Типа поиска строки в строке. Хочется от этого уйти. Поэтому надо искать какие-то структуры данных работающие на exists(..). Например Фильтры Блума. При 150 тыщ элементов он будет достаточно компактен. Или сортирующие и хеширующие структуры (R&B Trees). Тогда вместо 15 млрд мы сведем к 100 либо к 150 тыс циклов по одному из измерений как будет выбрано.
    Ответ написан
  • Оптимальное хранение данных в БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    EAV и JSON в филдах решают одни проблемы но подкидывают новых.
    Ответ написан
    Комментировать
  • Как сделать чтобы строка не вставлялась в БД, если не соблюдается формат поля?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно в продуктовых системах загрузка данных идет в 2 этапа.
    1) Грузят данные в специальные сырые таблицы (staging area). Грузят без первичных ключей и без проверок вообще. Вот как есть. С мусором и с битыми кодировками.
    2) Запускают специальные процедуры (раньше хранимки) а сейчас - процессы в application которые гоняют все-все бизнес-валидации и загружают то что есть в продуктовые таблицы (бизнес-факты). А по всем битым данным формируют отчёт. Типа не удалось загрузить сто тыщ телефонов.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    В этой задаче всё нормально и никаких видимых проблем нету. Обычно индекс работает синхронно с обновлением основной таблицы (кроме редких типов индексов основанных на текстовом поиске).

    Единственное что здесь избыточно так это сам ключ.
    '328382164-audi-a4-2012-blue-WВA2UAF48H38K007347'
    его копия будет лежать и в таблице и в индексе. Я-бы поискал какие-то закономерности.
    Если вся таблица созавалась под audi - то стоит-ли держать еще признак рядом?

    Если бы база была класса Oracle и ключ - композитный то я-бы разбил его на два-три подключа
    и использовал-бы compressed index. Тогда марки машин можно было сжать и уменьшить объем индекса.
    Ответ написан
    Комментировать
  • Порекомендуйте подходящую базу данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Бигдата и индексы - обычно не дружат друг с другом. Антагонизмы по сути. Поэтому от индексов надо уходить и двигаться в сторону партишенинга, сложного и полностью ориентированного на аналитические выборки.

    В идеале - реплицировать все данные в другую БД с другой геометрией таблиц или вообще в систему другого типа.

    Любая современная биг-дата будет дешевле по стоимости владения по сравнению с DBMS.
    Ответ написан
    Комментировать
  • Может ли запрос SELECT приводить к удалению данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я не специалист в MySQL но обычно транзакция заканчивается командой commit.
    Проверь где ты явно завершаешь (фиксируешь транзакцию) или у тебя в свойствах соединения должен быть включен авто-коммит. Хотя авто-коммит это плохой вариант если ты удаляешь много строк.
    Ответ написан
    Комментировать
  • Можно ли безопасно подключиться к MYSQL (JAVASCRIPT)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно не отдавать клиенту дата грид, а рендерить на сервере jpg-картинку с гридом.

    Тогда похитить данные будет во много раз сложнее.
    Ответ написан
    2 комментария
  • Mysql все хранить в 1 таблице или нескольких?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да можно слить 2 таблицы в одну.

    Это называется денормализация.

    Все способы - по своему правильные. Но на развитие этой мысли мне не хватит формата сообщения. Грубо говоря. Если твои данные не будут обновляться. И не будет аномалий обновления. То спокойно храни все в 1 таблице.
    Ответ написан
    Комментировать
  • Как отредактировать огромный SQL-файл?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я не специалист в mysql. Но в других DBMS достаточно CTAS/alter table rename для любых смен типов и геометрии хранения.

    Sed - это вообще плохая утилита для ETL. Не используйте ее.
    Ответ написан
    Комментировать
  • Правильно ли я спроектировал таблицы в бд?

    mayton2019
    @mayton2019
    Bigdata Engineer
    На практике таблицы со связями 1:1 никто не создает. Есть конечно исключительные случаи. Они связаны с обходом ограничений использования BLOB полей и прочего но это точно не ваш случай.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Такая конфигурация не имеет право называться базой данных. Присоединяюсь ко всем ораторам. Просто добавлю что портативное устройство должно писать логи операций. Чтобы выполнять разбор полетов и фиксировать что делалось. Можно с ротацией. А база данных должна лежать отдельно. На надежных удаленных серверах.

    MySQL - это не совсем DBMS. Это сборный лего-конструктор в котором каждая таблица в отдельности сама определяет свой уровень отказоустойчивости (т.н. engine). Поэтому обсуждать надёжность MySQL нет смысла без обсуждения того как была создана каждая таблица. In general - про надёжность сказать ничего невозможно.
    Ответ написан