записать пару-тройку сотен тысяч записей в таблицу

Статус
В этой теме нельзя размещать новые ответы.

Василий М.

Новичок
надо записать пару-тройку сотен тысяч записей в таблицу - статистические данные, три поля, все числовые.

сервер отдает Terminated и обрывает процесс, ибо у хостинга настройки:

* некритическая нагрузка (нагрузка на процессор > 10%)
Если процесс нагружает процессор в течение длительного периода более чем на 10% - процесс корректно завершается.
Этот период составляет 30 секунд.
* критическая нагрузка (нагрузка на процессор > 50%)
Если процесс нагружает процессор в течение длительного периода более чем на 50% - процесс корректно завершается.

* RAM (оперативная память сервера)
- 128 Мб на пользовательский процесс (для тарифных планов «VIP» и «VIP lite»)

в чем именно причина - у них не логируется.

цикл на 500 000 инсертов обрывается где-то на 120 000

вопрос - как вставить эти данные? варианты лимитирования и запуска по расписанию не подходят - надо все данные скопом записать.
 

Adelf

Administrator
Команда форума
Есть пара вариантов. Но лучше просто перестать экономить на хостинге.
 

Василий М.

Новичок
давай с вариантов начнем. вообще нет сейчас желания с хостингом заниматься(((

ps кстати, я не экономлю, посмотрел сейчас другие предложения за деньги, что плачу и удивился)
 
Последнее редактирование:

Adelf

Administrator
Команда форума
mysql процедура.
поэтапное построение темповой таблицы - потом синхронизация.
массовые инсерты идут быстрее.
отключать ключи таблицы если есть.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Меня вообще это веселит: сначала чувак с пафосом рассказывает, что "впс не нужен, есть хостинги" — а потом удивляется, что детские грабельки заезжают ему по яйцам.
 

Redjik

Джедай-мастер
Код:
SET foreign_key_checks = 0;
ну и конечно все в транзакцию завернуть
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ну и конечно потом выгребать неконсистентность :)
прежде чем отключать foreign_key_checks, надо провести анализ данных

* RAM (оперативная память сервера)
- 128 Мб на для тарифных планов «VIP»
Ё. иди трахай своего хостера и не трать время нормальных людей
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
128M на пользовательский процесс, это как? Чет я туплю.
 

Adelf

Administrator
Команда форума
мне не жалко 500 рублей на простенькую VDS на которой лежат всякие проекты, которые вообще не приносят дохода. А ты платишь 100+ рубликов за таймвеб хостинг для своего проекта, который приносит тебе ощутимый доход(ты никогда не устаешь это подмечать) и тебе жалко денег взять хотя бы такую же, которая решила бы все эти мелкие проблемы.
 

Василий М.

Новичок
Короче, давайте вы мне поможете советом с архитектурой. Я свой уютный сайтик объявлений делаю, пока безработный. Хочу авито перепрыгнуть и стать миллионером.

Суть в следующем - есть классическое дерево id-pid состоящее из более чем 1500 элементов и дерево будет расширяться.
Есть страны (4) и их регионы (~200) и населенные пункты. Количество населенных пунктов около 7000.
Пользователь, выбирая свою деревню на сайте, должен видеть кол-во объявлений в каждой категории.Как пример.
Соответственно, надо хранить данные о кол-ве объявлений в каждой деревне и в каждой тематической категории.
7000 * 1500 категорий получаем 10 500 000 записей.

Тамблицы региональности имеют вид
ID_города | ID_категории | количество
Уникальный индекс - ID_города | ID_категории

Записывать кол-во объявлений я сперва думал используя триггеры. Т.е. вставка объявления в таблицу вызывает триггер, который обновляет таблицу региональности.
Типа этого:

PHP:
CREATE TRIGGER `increment_city_count` AFTER INSERT ON `advert`
FOR EACH
ROW IF( NEW.advert_place_city
AND NEW.advert_place_region
AND NEW.advert_place_country )
THEN
INSERT INTO `advert-city_count` ( `id_city` , `id_category` , `count` )
VALUES (
NEW.advert_place_city, NEW.advert_category, 1
) ON DUPLICATE
KEY UPDATE `count` = `count` +1;
END IF
Но основная беда в том, что промежуточные (общие) узлы дерева должны тоже хранить информацию о кол-ве объявлений в их дочерних узлах:

Код:
- Level 1 (150) - общее кол-во
-- Level 2.1 (100) - кол-во в данном узле
-- Level 2.2 (50) - кол-во в данном узле и узле 3 уровня
--- Level 3 (20) - кол-во в данном узле
Пришлось писать cron скрипт, который сначала обнуляет таблицу региональности, потом записывает туда только те узлы, в которых есть объявления (преимущественно конечные узлы).
Далее запускается рекурсия, которая бегает по таблице и записывает информацию о родительских узлах, потомки которых хранят информацию о кол-ве записей.

Чем больше будет объявлений в разных городах или чем больше будет древо категорий, тем больше будет расти объем рекурсивной операции по обновлению данных.

На новом хостинге с 1024 ОЗУ вроде все отработало. Но все равно как-то не нравится мне все это.
 

Василий М.

Новичок
мне не жалко 500 рублей на простенькую VDS на которой лежат всякие проекты, которые вообще не приносят дохода. А ты платишь 100+ рубликов за таймвеб хостинг для своего проекта, который приносит тебе ощутимый доход(ты никогда не устаешь это подмечать) и тебе жалко денег взять хотя бы такую же, которая решила бы все эти мелкие проблемы.
а где такой VDS?

нет, этот проект мне ничего не приносит, я его только развиваю и.. на таймвеб я только сегодня перешел, на нем как раз все летает.
 

Василий М.

Новичок
с чего вы вообще решили что мне жалко денег на хостинг?)
вы меня носом ткните что покупать надо.
Ежики кололись, но...
а что не так? я сегодня взял протестировать таймвед, мощности пока хватает. 20 гигов. Мне этого хватает.
А VDS мне зачем? Я настраивать ничего не умею там.
 

shureen

Милорд Лось Кристофер
для личных проектов юзал https://www.ihor.ru/vds за 250р в месяц, всё летает. За 500 так вообще огого какая вм`ка :)

А VDS мне зачем? Я настраивать ничего не умею там.
А чего там настраивать то? В нете материалов полно. Хоть из пакетов, хоть ручками
 

Василий М.

Новичок
shureen, Слушай, ты в КБПМ не работал случаем?)


Ладно, вопрос можно решать закрытым. Задача решилась элементарно.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху