За последние 24 часа нас посетили 15960 программистов и 1666 роботов. Сейчас ищут 988 программистов ...

Как разгрузить sql

Тема в разделе "Прочее", создана пользователем EvelRus, 17 янв 2009.

  1. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Подскажите, как немного разгрузить sql базу )))
    Ситуация такая в БД добавляются строки...
    Например в таблицу name из файла name.txt... Там около миллиона записей :)))

    Как из корректно загрузить? Через минуту у меня система перестает слушаться :))) Висит под 101% )))
     
  2. Тигренок

    Тигренок Активный пользователь

    С нами с:
    29 дек 2008
    Сообщения:
    133
    Симпатии:
    0
    Адрес:
    ты такой нарисовался?
    поищи на phpinside.ru там очень много о разгрузке (оптимизации) БД.
    если не срочняком, в свободное время могу посмотреть в закладках (браузера). у меня даже отдельная папка об SQL оптимизации, мониторинг :)
     
  3. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    не, не горит :)))
    Просто загонять в базу поллимона строк данных :)))

    по поводу аптимизации :)))

    Там три поля всего - ID(int15), Name(varchar32), Name2(varchar32)
    Заполняется только второе (первое автоматом)
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    делай редирект скрипта самого на себя, например каждые 1000 записей.
     
  5. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    не понял.....
    Он зановоже начинать будет...
     
  6. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Nemo
    делай так чтоб не заново
     
  7. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
     
  8. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    PHP:
    1. <?php
    2. if(!isset($_SESSION['from']))
    3.     $_SESSION['from'] = 0;
    4.  
    5. $n = count($array)
    6. for($i=$_SESSION['from']; $i<$n; $i++) {
    7.     mysql_query('INSERT INTO ...');
    8.     if($i - $_SESSION['from'])>50
    9.         exit(header('Location: ' . $SERVER['PHP_SELF']));
    10. }
     
  9. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ну блин..
    PHP:
    1. <?
    2. $arr=array("lalala","lololo",'asdasd','asdasd','asdasdasdasd','423423423','34234234','3242342342','234234234','234234324');
    3. if(!file_exists("db.php")){
    4.    file_put_contents("db.php","<?\$data=".var_export($arr,1).";?".">");
    5.    header("Refresh:2");
    6.    die("Start...");
    7. }
    8. include "db.php";
    9. $s=!$_GET['s']?0:$_GET['s'];
    10. if(!empty($data[$s])) {
    11.    header("Refresh:3;url={$_SERVER['PHP_SELF']}?s=".($s+3));
    12.    for($i=$s,$c=$data[($s+3)]?($s+3):count($data);$i<$c;$i++) {
    13.         print "#".($i+1)."__".$data[$i]."<br>";
    14.    }
    15. }else{
    16.   print "Install is over";
    17. }
    18. ?>
     
  10. doubled

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

    С нами с:
    18 янв 2009
    Сообщения:
    3
    Симпатии:
    0
    Такая же проблема. Файл 130 мб. Хочу загрузить на севрвер, но не через пхп. Есть ли программы нормальные? И еще там символ " встречается, из-за него некоторые проблемы при добавлении строкой mysql -uUSERNAME -p newdbname < /path/to/dump.sql
     
  11. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Я не понимаю, в чем проблема поставить время жизни скрипта на 30 минут, и со слипом добавлять в цикле записи?
     
  12. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Делал.. все рвано висит :((( Пока не отрубишь БД, система висит :(((
     
  13. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    А из файла читаешь как?
     
  14. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    PHP:
    1. <?$file = file('Name.txt');
    2. $count = count($file)-1;
    3. for ($i = $count;$i>=0;$i--)
    4. {
    5. $sql = mysql_query('insert into....');
    6. }
     
  15. doubled

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

    С нами с:
    18 янв 2009
    Сообщения:
    3
    Симпатии:
    0
    Давайте не путаться) Мне надо НЕ средствами пхп. А вот Nemo надо средствами пхп.
     
  16. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    doubled, отдельную тему!!!!
     
  17. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Весь файл грузится в память, отсюда и могут быть проблемы.

    Читай по строкам, типа такого:
    PHP:
    1. <?php
    2. $handle = fopen("/tmp/inputfile.txt", "r");
    3. $bufer = '';
    4. while (!feof($handle)) {
    5.     $buffer .= fgets($handle, 4096);
    6.     $strings = explode("\r\n", $buffer);
    7.     $values = "";
    8.     for ($i = 0; $count = (sizeof($buffer) - 1); $i < $count; $i++) {  // -1 на случай, если последняя строка считается неполностью, т.е. не влезет в интервал 4096 байт
    9.         $values .='('.mysql_real_escape_string($strings[$i]).')';
    10.     }
    11.     $query = 'INSERT INTO Table VALUES '.$values;
    12.     mysql_query($query);
    13.     $buffer = $strings[++$i]; //чтобы последняя строка соединилась с новой прочтенной
    14.     sleep(1);
    15. }
    16. fclose($handle);
    17. ?>
    Хотя можно и без sleep. Не забудь время выставить побольше.
     
  18. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    А зачем кол-во байт?:)))
    Мне важно чтобы вся строка влезла... а не разбивалась на две...
     
  19. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Nemo
    Чтобы потихоньку читать файл, не целиком все 10 мбайт (или больше). Не забывай, что файлы пишутся сплошняком, просто разделителями служат \r\n, которые блокноты и прячут, разбивая строки.
     
  20. doubled

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

    С нами с:
    18 янв 2009
    Сообщения:
    3
    Симпатии:
    0
    Nemo
    Не хочу) Зачем создавать две темы одной проблемы, тем более что мой ответ будет содержать лишь одну строку.
     
  21. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Проблема СОВЕРШЕННО другая! И не флудите в МОЕЙ теме :)
     
  22. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Nemo
    Ну как результаты?
     
  23. Тигренок

    Тигренок Активный пользователь

    С нами с:
    29 дек 2008
    Сообщения:
    133
    Симпатии:
    0
    Адрес:
    ты такой нарисовался?
  24. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    чуть позже все гляну :)) 23 последний экзамен сдам :)))