За последние 24 часа нас посетили 58425 программистов и 1838 роботов. Сейчас ищут 922 программиста ...

Заливка большого количества строк на удаленный сервер

Тема в разделе "PHP и базы данных", создана пользователем tipati, 13 янв 2016.

  1. tipati

    tipati Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    15
    Симпатии:
    0
    Когда база крутилась на локалхосте, проблем залить прайс с 750 тысячами позиций проблем не было. Обошел построчно файл, выполнил 750 тысяч mysql_query("INSERT INTO..."), подождал минуты 3, все залилось... Сейчас перешел на исполование mysql-сервера на другом хостинге. Стало вместо 1500 запросов в секунду выполняться 30. Пробовал mysql_pconnect, mysqli_prepare - никакого эффекта не дает. Приходится сейчас заливать на локальный хостинг, затем делать дамп и загружать дамп на удаленный.
    Как оптимизировать такие операции? Получается, при каждом запросе на установку соединения с удаленным сервером теряется куча времени...
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну для начала нужно вспомнить что каждый инсерт-запрос может содержать несколько кортежей для вставки. и общая длина такого пакета просто не должна превысить установленный лимит на размер пакета.
    пконнект и препейр к делу воооооообще никакого отношения не имеют. и вдруг очевидно стало что ты не понимаешь зачем они вообще нужны. но не об этом сейчас.
    по поводу оптимизации - тут надо понимать что там вообще происходит. фильтруются ли повторяющиеся строки, как настроены индексы, как вообще написан сценарий импорта и так далее далее далее.
    и последнее - что значит
    ? у тебя получается перед каждым инсёртом идет новое установление соединения чтоль? ведь именно этот смысл эта фраза и имеет.
     
  3. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    В этом другом хостинге есть shell доступ ? Если есть, то лучше
    Код (PHP):
    1. mysql -u root -p database < import.file.sql
     
  4. tipati

    tipati Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    15
    Симпатии:
    0
    Я не вникал в технические тонкости. Я лишь понимаю, что если выполнять эту серию запросов локально (независимо от сервера), то это будет быстро. Если выполнять пехапе на одном сервере, а базу держать на другом - будет ооочень медленно. А чем это объясняется - в этом и вопрос.
    Но собирать их самостоятельно, высчитывая еще попадание в лимит - не колхозно ли...
    это как раз неважно. нужно тупо вогнать в базу ровно допустим миллион строк, неважно, каких и что там повторяется. Потому что задача в любом случае значительно не упрощается.
    Вы предлагаете позволить менеджеру загружать прайс через шелл? Тем более, каким-то макаром сформированный в sql-инструкции. Или сначала из CSV, в котором он загружает через форму на сайте, делать на этом же сайте sql, копировать файл на удаленный сервер и там же выполнять шелл?
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а, ну в таком случае единственно чем это объясняется - среда передачи данных. локальный сервер работает через юникс-сокет или через лупбэк-девайс что очень быстро, а удаленный сервер - со скоростью доступа к этому серверу в лучшем случае. еще может быть дополнительный шепер на соединение, на тип сервиса, просто загружен канал торрентами (даже если соседа). плюс может быть трафик шифруется. и так далее. в общем медленно. даже если одно соединение устанавливается - обмен-то данными всё равно в медленной среде будет.

    как вариант - загружать на хост, там разбирать и вставлять в локальную для него субд.
     
  6. tipati

    tipati Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    15
    Симпатии:
    0
    я дебил. базу перенес, а к базе еще отдельно админку (без перетаскивания всего сайта) перенести не додумался... спасибо =)