Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
15 / 15 / 11
Регистрация: 22.12.2013
Сообщений: 104

Ускорение парсинга

28.12.2013, 14:43. Показов 856. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть блок кода который выполняет разбор массива с данными о товаре (массив берется из excel) и проверяет наличие такого товара в базе. Если товар есть - проверяются его параметры, иначе он добавляется. Можно ли здесь что-либо придумать для ускорения процесса?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
for($i = 5; $i < count($data); ++$i)
                    {
                        if(!empty($data[$i][0]) && !empty($data[$i][1]) && !empty($data[$i][3]))
                        {   
                            $price = (int)($data[$i][4]);
                            if($price > 0)
                            {
                                $flag = true;
                                $inpPrice = $price;
                                $price = $price*$exrate;
 
                                $price = ceil($price/100*110);
                                $code = (int)$data[$i][1];
                                $arti = $data[$i][2];
                                $name = $data[$i][3];
                                $type = $data[$i][5];
                                if($type == 'ок')
                                {
                                    $type = 1;
                                }
                                else
                                {
                                    $type = 0;
                                }
                                $guarantee = (int)($data[$i][8]);
 
                                $exist = $db->select('d_goods', array('g_code' => $code));
                                $codes[] = $code;
                                if(count($exist) == 0)
                                {
                                    $good = array('g_c_id' => $category,
                                        'g_code' => $code,
                                        'g_arti' => $arti,
                                        'g_name' => $name,
                                        'g_price' => $price,
                                        'g_guarantee' => $guarantee,
                                        'g_type' => $type,
                                        'g_photo' => 0,
                                        'g_inp_price' => $inpPrice);
                                    $db->insert('d_goods', $good);
                                }
                                else
                                {
                                    if($category != $exist[0]['g_c_id'])
                                        $db->update('d_goods', array('g_c_id' => $category), 
                                            array('g_id' => $exist[0]['g_id']));
                                    if($arti != $exist[0]['g_arti'])
                                        $db->update('d_goods', array('g_arti' => $arti), 
                                            array('g_id' => $exist[0]['g_id']));
                                    if($name != $exist[0]['g_name'])
                                        $db->update('d_goods', array('g_name' => $name), 
                                            array('g_id' => $exist[0]['g_id']));
                                    if($inpPrice != $exist[0]['g_inp_price'])
                                        $db->update('d_goods', array('g_price' => $price,
                                            'g_inp_price' => $inpPrice), 
                                            array('g_id' => $exist[0]['g_id']));
                                    if($guarantee != $exist[0]['g_guarantee'])
                                        $db->update('d_goods', array('g_guarantee' => $guarantee), 
                                            array('g_id' => $exist[0]['g_id']));
                                    if($type != $exist[0]['g_type'])
                                        $db->update('d_goods', array('g_type' => $type), 
                                            array('g_id' => $exist[0]['g_id']));
                                }
                            }
                        }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.12.2013, 14:43
Ответы с готовыми решениями:

Защита от парсинга
Всем привет. Необходимо отделять поисковых роботов. Посоветуйте, как лучше реализовать такую защиту.

Принцип работы парсинга
Здравствуйте. Расскажите, пожалуйста, кто знает - как лучше построить парсинг информации. Стоит ли результаты записывать в MySQL? Как...

Подскажите алгоритм для парсинга
всем привет, вот у меня есть десяток таких блоков &lt;div class=&quot;title&quot;&gt; &lt;a href=&quot;http://test.com/asus_rt-n53/p195257/&quot;&gt; ...

3
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
28.12.2013, 14:57
Цитата Сообщение от fic Посмотреть сообщение
Можно ли здесь что-либо придумать для ускорения процесса?
Можно (и даже нужно) переработать скрипт таким образом, чтобы запросы в базу не шли в цикле. Например:
PHP
1
2
# Предполагаю, что эта строка получает запись из БД
$exist = $db->select('d_goods', array('g_code' => $code));
Можно убрать, а ещё до цикла вытаскивать все товары из БД в массив и с массивом уже сличать. Но если товаров масса, это тоже будет замедлять скрипт. Вот это тоже:
PHP
1
$db->update('d_goods', array('g_c_id' => $category)
Можно убрать, и формировать SQL запрос в цикле, а потом одним запросом в БД вписать.
1
15 / 15 / 11
Регистрация: 22.12.2013
Сообщений: 104
28.12.2013, 15:07  [ТС]
Цитата Сообщение от lyod Посмотреть сообщение
Можно (и даже нужно) переработать скрипт таким образом, чтобы запросы в базу не шли в цикле. Например:
PHP
1
2
# Предполагаю, что эта строка получает запись из БД
$exist = $db->select('d_goods', array('g_code' => $code));
Можно убрать, а ещё до цикла вытаскивать все товары из БД в массив и с массивом уже сличать. Но если товаров масса, это тоже будет замедлять скрипт.
Товаров около 4к. Будет быстрее перебирать весь масив, чем сделать выборку из базы?

По поводу остального - спасибо, переделаю
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
28.12.2013, 15:15
Цитата Сообщение от fic Посмотреть сообщение
Товаров около 4к.
Ооо... Тут я даже не знаю, если всё вытащить - скрипт может память забить и отвалиться. Если не вытаскивать - куча запросов. Тут нужно спрашивать тех, кто с такими объёмами имел дело, у них опыта побольше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.12.2013, 15:15
Помогаю со студенческими работами здесь

Реализация парсинга в серверном режиме
Возник такой вопрос, можно ли посредством PHP выполнять скрипт без пользователя ? Поясню, пользователю нужно спарсить очень много...

Защита номера телефона от парсинга
Всем доброго дня! Хочу спросить у тех, кто делал всевозможные парсеры контента: возможно спрятать номера телефонов на сайте (список...

Пример парсинга записи с другого сайта
Привет, трбуется простой пример парсинга записи с другого сайта, например новости с лента ру или что нибудь еще. Спасибо

Выбор языка программирования для парсинга
Уважаемые форумчане помогите с выбором языка программирования для парсинга веб страниц.

Удалить лишние символы после парсинга
Добрый вечер! Уже киплю... Перепробовал уже с 10-ток всяких функций по работе со строками после парсинга. Имеется строка вида: echo...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru