Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2013, 03:56   #11
Jleksern
Форумчанин
 
Аватар для Jleksern
 
Регистрация: 14.10.2011
Сообщений: 137
По умолчанию

Цитата:
Сообщение от grominfo Посмотреть сообщение
Такие объёмы нужно хранить в базе данных. Это же сколько нужно оперативки, чтобы выгрузить этот файл.
На оборот, Я загружаю туда, десятки миллионов данных.
Как не странно мои 2 гига озу (ОС Ubuntu) полностью хватает.
Недавно нужно было файл в 300 мегов почистить от дублей и 2 гига озу оказалось мало, и 16 озу тоже.
Кинул эту затею и решил обойтись иначе.

Собственно немного статистики, которая меня не порадовала.
Вариант 1 с
PHP код:
$arr1=explode(':',$file1); // a | b | c | d;i;f;g;h
$arr2=explode(';',array_pop($arr1));
$arr3=array_merge($arr1$arr2);
print_r($arr3); 
Средняя скорость запросов - 1000/ 27.17 (запросов/сек)
и почему-то в чистой бд взялось место 1000 записей, взялось почти 5 тыс.

Вариант 2 с

PHP код:
$r explode(":" ,$r);
$r implode(";" ,$r);
$r explode(";" ,$r); 
Средняя скорость запросов - 1000/ 20.46 (запрос/сек)
И тут почему-то взялось в место 1000 отправленных запросов, аж 2092

Мой фулл скрипт.
PHP код:
<?php
$start 
microtime(true);
$mysqli = new mysqli("localhost""root""JleksernMaxFax21Su""password");
ini_set('memory_limit''1999M');
ini_set('max_execution_time''999999');
$filename 'log.txt';
$i=0;
$error 0;
$file1 file('norm_vid.txt');

foreach(
$file1 as &$r){

$r explode(":" ,$r);
$r implode(";" ,$r);
$r explode(";" ,$r);  
 
  
    
$a "INSERT INTO email (mail, pass) VALUES ('{$r['0']}','{$r['1']}'); ";
    
$handle fopen($filename'a');
    if (
$mysqli->query($a)) {
        
$i++;
    }  else 
    {
        
fwrite($handle$a);
        
$error++;
    }
  }


$mysqli->close();
echo 
"Всего запрособ обработано - $i<br />";
echo 
"Ошибок в запросе - $error<br />";
if (
$error 0) {
echo 
" (сохранено в файл $filename)<br /> ";
}
$time microtime(true) - $start;
printf("Средняя скорость запросов -  $i/  %.2F (запрос/сек) <br>"$time);
printf('Всё время выполнения - %.2F сек.<br />'$time);

?>

Ниже сам файл
Вложения
Тип файла: txt norm_vid.txt (18.5 Кб, 1 просмотров)
Jleksern вне форума Ответить с цитированием
Старый 31.08.2013, 04:11   #12
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

Попробуй амперсанд убрать:
PHP код:
foreach($file1 as $r){ 
И можно сократить время выполнения скрипта, если не открывать log.txt при каждой итерации, даже если ничего в него не пишешь. А если формировать в INSERT по 100 записей, то еще и число обращений к БД уменьшится.

Последний раз редактировалось Mortimoro; 31.08.2013 в 04:16.
Mortimoro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разделение строк в массив Abdukhafiz Microsoft Office Excel 2 19.04.2012 21:28
Разделение строк в StringGrid на группы Хохол Компоненты Delphi 6 21.03.2011 11:51
Разделение строк удовлетворяющих определенным условиям prettyfly Microsoft Office Excel 1 15.11.2010 16:52
Разделение. Maksim_27_10 Общие вопросы C/C++ 8 21.04.2010 20:40