За последние 24 часа нас посетили 18110 программистов и 1656 роботов. Сейчас ищут 1560 программистов ...

Обработка и отправка большого кол-ва данных

Тема в разделе "Решения, алгоритмы", создана пользователем Dzen7, 2 дек 2012.

  1. Dzen7

    Dzen7 Активный пользователь

    С нами с:
    18 фев 2012
    Сообщения:
    10
    Симпатии:
    0
    Добрый день,

    Подскажите пожалуйста. У нас есть локальная база.
    И глобальная база на удаленном сервере.
    На локальной базе в таблице клиентов, находится например 1000 клиентов.
    Нам нужно отправить информацию о каждом клиенте в глобальную базу.
    Кроном запускается скрипт, делает запрос к локальной базе, получаем нужные нам ID этих 1000 клиентов и информацию по ним, дальше в цикле while ($result = mysql_fetch_array($query)) идём по клиентам и отправляем информацию к глобальной базе по всем 1000 клиентам. С этим всё ок, когда клиентов мало.
    Но когда их большое кол-во, то скрипт просто не успеет отработать всех 1000 клиентов.
    Наткнемся на максимальное время работы скрипта.

    Каким образом можно это правильно реализовать? Нужно использовать многопоточность/многопроцессорность или надо делать какой-то Крон менеджер или еще как-то?
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Можно просто увеличить максимальное время работы скрипта.
    Но я бы сделал так, чтобы информация к глобальной базе отправлялась не в цикле по каждому клиенту, а всего один раз, по всем клиентам сразу, после окончания цикла. А в цикле - просто собирал бы эту информацию в какую-нибудь переменную (для отправки).
     
  3. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Чувак, удали дубль этой темы в другом разделе! На бан нарываешся.

    Можно сократить количество отсылаемых записей. Наверное не у всех клиентов что-то менялось с прошлой отсылки? Добавь в таблицу Клиенты поле "дата последнего изменения клиента" и сравнивай его с известной датой прошлой массовой отсылки.
    Можно вместо поля использовать какие-нибудь логи изменений, где будет id клиента и дата операции над ним.
     
  4. Dzen7

    Dzen7 Активный пользователь

    С нами с:
    18 фев 2012
    Сообщения:
    10
    Симпатии:
    0
    да, изначально так и хотел делать, но глобальная база не принимает всех сразу. Там свой нюанс в принятии, который к сожалению не поменять.

    есть еще соображения отправлять порциями, но как это реализовать без слишком большого дёрганья базы, пока не пойму:(