Задать вопрос
Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (8)

Лучшие ответы пользователя

Все ответы (7)
  • Вставка 10 000 записей в одной транзакции?

    StepanTomsk
    @StepanTomsk
    bdmalex

    INSERT DELAYED работает только с MyISAM, MEMORY, ARCHIVE. В версии 5.6 это уже depricated, в версии 5.7 — исключён. Применение находило для отложенной записи от множества клиентов, не от одного. Минус инструкции — отсутствие гарантии записи и в повышенном потреблении ресурсов сервера т.к. на каждую отложенную запись открывался свой поток, который закрывался когда несколько потоков объединялись в единичную запись в таблицу. По сути, несколько delayed трансформировались в последовательный список обычных insert (это если говорить образно).

    Agent_J

    1) 2МБ в запросе для innodb «из коробки» вполне допустимый размер.

    2) Для повышения производительности Вы можете использовать один INSERT с несколькими VALUES:

    INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
    

    Документация поясняет что на запрос в условных единицах тратится (без учета коннекта):

    Sending query to server: (2)
    Parsing query: (2)
    Inserting row: (1 × size of row)
    Inserting indexes: (1 × number of indexes)
    

    Отправку можно опустить, но 10000 INSERT разделённых «точкой с запятой» на уровне логики БД это 10000 отдельных запросов, для которых будет применяться парсер, причём не синтаксический а именно единичного запроса, который формирует команду из SQL в низкоуровневую команду хранилища, что дает 20к единиц и это при том что вставка данных потребует только 10к единиц.

    3) В случае если есть возможность записать файл на диск с доступом чтения для сервера mysql то: LOAD DATA INFILE — прирост производительности в 20 раз (источник та же документация).
    Ответ написан
    1 комментарий
  • Масштабирование и обрезка изображений под заданные размеры?

    StepanTomsk
    @StepanTomsk
    Существует богатая функционалом обработки изображений Open Source библиотека ImageMagick, у неё в числе прочих есть консольная программа convert, которая позволяет производить с изображениями огромное количество преобразований (в Интернете есть примеры как с её помощью повторяют эффекты Photoshop).

    Для пакетной обработки Вы можете написать скрипт (например на bash), который сканирует все файлы в папке, а затем для каждого совершает действия через convert.

    Вот хорошая страница с примерами convert -resize.

    Пример преобразования исходного изображения к размеру 500x500 px:

    convert in.jpg -resize 500x500\! out.jpg
    


    P.S.: Запускается под Linux, Windows, Mac Os X, iOS, Android OS, FreeBSD и еще на ряде совместимых платформ.
    Ответ написан
    4 комментария
  • Как заставить WEB сайт работать локально в Chrome?

    StepanTomsk
    @StepanTomsk
    У вас три варианта:
    1) Как говорил SLIDERWEB написать локальный WEB сервер с синхронизацией.
    2) Если работа только в Chrome то использовать его локальное хранилище WEB SQL (Администрирование, перевод описания).
    3) Реализовать резервирование каналов связи, если связь пропала у одного провайдера то переключаться на другого.

    В случаях 1 и 2 потребуется участие программистов, но второй более гибкий, по сути, если нет связи с сервером то операции записи на сервер откладываются в отдельные таблицы. Плюс вы должны предусмотреть то что должны в БД браузера иметь копию необходимых данных из БД сервера.

    Вариант номер три требует участия системного администратора каждого фитнес-центра и если эти организации не являются вашими филиалами, а Вы только разработчик программного обеспечения то Вы можете его только рекомендовать.

    Ответ на Ваш вопрос — "Да это возможно. Только стоит ли затрачивать ресурсы программистов на построение отказоустойчивого приложения если можно за счёт меньших средств организовать резервирование каналов связи?"
    Ответ написан
    4 комментария
  • Вставка 10 000 записей в одной транзакции?

    StepanTomsk
    @StepanTomsk
    Agent_J

    Повторно уточняю — 2Мб в транзакции это нестрашно, если она единична в один момент времени, если у вас одновременно 100 DML команд, то тогда надо «тюнить» InnoDB.

    До версии 5.6.8 размер лога транзакций составлял суммарно 10Мб, в старших версиях 100Мб (Документация).

    Вот три переменных которые влияют на файлы лога, изменять значения только на остановленном сервере и с удалением предыдущих файлов лога (вначале потренируйтесь на кошках):

    innodb_log_files_in_group:
    
    Число журналов в группе файла регистрации.. InnoDB обеспечивает ротацию журналов. Рекомендуется использовать значение 3.
    
    innodb_log_file_size:
    
    Размер каждого журнала в файле регистрации групп в мегабайтах. Разумные значения располагаются от 1M до размера буферного пула, определенного ниже. Чем больше значение, тем меньше будет число контрольных точек сброса данных в буферном пуле, что уменьшит медленный дисковый ввод-вывод. Но большие журналы также означают, что восстановление будет медленнее в случае аварийного отказа. Ограничение размера файла такое же, что и у файла данных.
    
    innodb_log_buffer_size:
    
    Размер буфера, который InnoDB использует, чтобы писать файлы регистрации на диск. Разумные значения располагаются от 1M до половины объединенного размера журналов. Большой буфер файлов регистрации позволяет большим транзакциям выполняться без необходимости писать файл регистрации на диск, пока транзакция не закончится. Таким образом, если Вы имеете большие транзакции, увеличение буфера файла регистрации уменьшит медленный дисковый ввод-вывод.
    
    Ответ написан
    Комментировать
  • Вставка 10 000 записей в одной транзакции?

    StepanTomsk
    @StepanTomsk
    YourChief
    почему бы не расширить bulk_insert_buffer_size и не вставлять единственным инсёртом?

    1) bulk_insert_buffer_size относится к MyISAM а не к InnoDB!
    2) Приложение работает с БД через ORM, многие (включая меня) начали думать о производительности запроса, а вопрос стоял в отказоустойчивости транзакции на DML в 2Мб.
    Ответ написан
    Комментировать