хранимая процедура Vs fork (новый процесс)

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение ProFTP » 2009-08-15 9:28:58

нужно сделать сложные запросы, еще сложнее чем этот в низу...

процедуру SQL что-то не хочется использовать, в любом случае, если сервер глюканет сильно или если выключить ./mysql.server stop, то выполняемые запросы оборвутся, правильно?

тем более нужно сделать несколько циклов while, в процедуре что-то не знаю не очень как это сделать

Код: Выделить всё

UPDATE test1
SET close = 1
WHERE id = (SELECT id
FROM
  test1
WHERE
  parent = :P
  
UNION
  
SELECT t1.id
FROM
  test1 t1 JOIN test1 t2
    ON t1.parent = t2.id
WHERE
  t2.parent = :P )


и вот такое можно ли сделать
(условно)

Код: Выделить всё

$ss = 'SELECT id_se 
FROM section
WHERE id = 1';

while ($id_se = $ss ) {

$ss2 = 'SELECT id_se
FROM
  section
WHERE
  parent_se_id = 13
  
UNION
  
SELECT t1.id_se
FROM
  section t1 JOIN section t2
    ON t1.parent_se_id = t2.id_se
WHERE
  t2.parent_se_id = 13';


while ( $id = $ss2 ) {


DELETE from t1,t2,t3,t4
where id = $id bla-lba-bla

}


}
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение zingel » 2009-08-17 11:16:36

plsql такое умеет
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение Fastman » 2009-08-17 14:51:03

Хранить в базе логику - зло !
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение ProFTP » 2009-08-17 15:55:12

нашел:

Код: Выделить всё

  * Incorrectly used table in subquery:
 
      Error 1093 (ER_UPDATE_TABLE_USED)
      SQLSTATE = HY000
      Message = "You can't specify target table 'x'
      for update in FROM clause"
 
      This error will occur in cases like this:
 
      UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);
 
      It's okay to use a subquery for assignment within an UPDATE statement, since subqueries are legal in UPDATE and DELETE statements as well as in
 SELECT statements. However, you cannot use the same table, in this case table t1, for both the subquery's FROM clause and the update target.  
 
Usually, failure of a subquery causes the entire statement to fail. 
но тут можно так написать

Код: Выделить всё

UPDATE section AS t4 LEFT JOIN section t2 ON t4.parent_se_id = t2.id_se
SET t4.active_se = 1 - t4.active_se
WHERE t2.parent_se_id = 54 or t4.parent_se_id = 54 
zingel писал(а):plsql такое умеет
MySQL это тоже умеет, большие возможности не давно появились, но там говорят что все есть
http://habrahabr.ru/blogs/mysql/63883/
в PgSQL оно появилось давно и там много чего понадобавляли
Fastman писал(а):Хранить в базе логику - зло !
а те запросы которые нельзя написать в один или в два запроса?
можно форкнутся, тогда все выполниться независимо от родителя скрипта...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение hizel » 2009-08-17 16:42:27

Fastman писал(а):Хранить в базе логику - зло !
ты об этом оракловодам пошути :]
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение Fastman » 2009-08-17 16:53:43

hizel писал(а):
Fastman писал(а):Хранить в базе логику - зло !
ты об этом оракловодам пошути :]
С ними шутить - себе дороже.
А поковырявшись в базах с логикой внутри - я решил что буду предавать анафеме всех кто проповедует этот путь.
Ибо, поддержка и обслуживание этих шняг - кровавое и неблагородное дело.
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение hizel » 2009-08-17 17:55:54

тото оракул в свое поделие две жабо-машины заталкал :]
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение ProFTP » 2009-08-17 22:26:26

я оракол не использовал, а почему ты говришь что она жрет много? там что конфига нету? я тоже моуг выжедить в конфиге память для MySQL

говорят что мускл не выдержит большую базу 200Gb - 4T

где-то было написано, что оракл может обработать как-то в один поток все, по этому ему передают все в одном запросе, а mysql все равно что 1-2 или 4 запроса, но рекоменжуется не больше 15... хотя извезные большие движки и 33 передают

вот зайти там посмотри там написано 33 http://forum.vingrad.ru/forum/topic-258166.html
Последний раз редактировалось ProFTP 2009-08-17 22:29:40, всего редактировалось 2 раза.
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение Fastman » 2009-08-17 22:28:45

ProFTP писал(а):я оракол не использовал, а почему ты говришь что она жрет много? нам что окнфига нету? я тоже моуг выжедить в конфиге память для MySQL

говорят что мускл не выдержит большую базу 200Gb - 4T

где-то было написано, что оракл может обработать как-то в один поток все, по этому ему передают все в одном запросе, а mysql все равно что 1-2 или 4 запроса, но рекоменжуется не больше 15... хотя исвезные большие движки и 20 передают
На заборе тоже X%$ написано... подойдешь..потрогаешь - сучок мля...
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение ProFTP » 2009-08-17 23:02:59

как там в Минске после потопа? :-D
onliner.by

Изображение
Изображение
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение Fastman » 2009-08-18 0:04:46

offtop.
Это не место для таких вопросо. есть /dev/null

P.S.
Ну поплавали немного....
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение buryanov » 2009-09-13 0:41:39

Знакомые программеры для клиента переносили продукт с oracle на mysql, клиент не хотел покупать лицензию на oracle. Вся логика хранится на сервере, написано огромное колличество процедур, функций и тригеров.
Насчёт больших баз: за месяц база выростает до 1-1,5Тб, потом бекап, вычистка, создание нового периода и всё по новой. После 20 числа серверу тяжеловато, до 90% загрузка, 1 числа идёт пересоздание, парерасчёт и сравнение отчётов, заргузка 100%. За 1,5 года ниодного подвисания и отказа.
Железо: 2 xeon 5440, 32G ram.
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение Fastman » 2009-09-13 0:56:32

buryanov писал(а):Знакомые программеры для клиента переносили продукт с oracle на mysql, клиент не хотел покупать лицензию на oracle. Вся логика хранится на сервере, написано огромное колличество процедур, функций и тригеров.
Насчёт больших баз: за месяц база выростает до 1-1,5Тб, потом бекап, вычистка, создание нового периода и всё по новой. После 20 числа серверу тяжеловато, до 90% загрузка, 1 числа идёт пересоздание, парерасчёт и сравнение отчётов, заргузка 100%. За 1,5 года ниодного подвисания и отказа.
Железо: 2 xeon 5440, 32G ram.
Умеючи и x*й сломать можно.
Я верю в героизм и умение наших програмеров, и не такое делали :)
Но я бы не хотел через еще полтора года разбираться с этим, когда "знакомые програмеры"
пропадут либо не станут заниматься этим хламом. Плавали - знаем :)

P.S.
Програмеры странные.. наиболее близкий аналог Oracle - PostgreSQL. С учетом того что триггеры появились например в mySQL только с 5.0.2 версии... более чем спорно....
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение buryanov » 2009-09-13 1:03:56

"знакомые програмеры"
- довольно крупная софтверная фирма, ветка - 5.1. Раз в 2-3 месяца, мускул обновляется.
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение Fastman » 2009-09-13 1:16:40

buryanov писал(а):
"знакомые програмеры"
- довольно крупная софтверная фирма, ветка - 5.1. Раз в 2-3 месяца, мускул обновляется.
Да я честно не против..всякие ситуации бывают... Возможно действительно толковые ребята и сделали все грамотна.
Просто сам по работе столкнулся с такими базами "больших известных" фирм... :)
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение zingel » 2009-09-14 2:12:42

Насчёт больших баз: за месяц база выростает до 1-1,5Тб,
признайтесь, это яндекс? =)
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение ProFTP » 2009-09-16 18:49:10

полдскажите такой запрос можно как-то оптимизирвоать (этот запрос может часто выполнятся) ??

Код: Выделить всё

		my $sql_par = 'SELECT id_se
							  FROM section
							WHERE
  					parent_se_id = '.$args[0].'
					  
					UNION
					  
					SELECT t1.id_se
					FROM
  					section t1 JOIN section t2
    			ON t1.parent_se_id = t2.id_se
					WHERE
			  t2.parent_se_id = '.$args[0];
		
 	 my $sth = $dbh->prepare($sql_par);
      	 $sth->execute();          
            
            while ( my $id = $sth->fetchrow_arrayref() ) {    
    
       
    			$dbh->do( 'DELETE from section        				   	
              	   	  WHERE id_se = '.$id->[0],
       		 	 undef, undef );        
       
    			$dbh->do( 'DELETE from comment        				   	
              	   	  WHERE id_se = '.$id->[0],
       		 	 undef, undef );
       		 	 
    			$dbh->do( 'DELETE from content        				   	
              	   	  WHERE id_se = '.$id->[0],
       		 	 undef, undef );       		 	        
       
				}
				
           $sth->finish();     
    


    			$dbh->do( 'DELETE from section        				   	
              	   	  WHERE id_se = '.$args[0],
       		 	 undef, undef );    
    			
   			$dbh->do( 'DELETE from comment        				   	
              	   	  WHERE id_se = '.$args[0],
       		 	 undef, undef );
       		 	 
    			$dbh->do( 'DELETE from content        				   	
              	   	  WHERE id_se = '.$args[0],
       		 	 undef, undef );  
     		 	 
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение ProFTP » 2009-09-16 18:51:07

buryanov писал(а):Знакомые программеры для клиента переносили продукт с oracle на mysql
что за продукты?

oracle для разработчиков бесплтаный, его поставить можно кажется тестово... только в коммерческих проектах нельзя
если ты поставишь где-то на VPS на свой веб-сервер, разве это нельзя?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение buryanov » 2009-09-16 23:47:00

ProFTP писал(а):
buryanov писал(а):Знакомые программеры для клиента переносили продукт с oracle на mysql
что за продукты?
билинг
ProFTP писал(а): oracle для разработчиков бесплтаный, его поставить можно кажется тестово... только в коммерческих проектах нельзя
если ты поставишь где-то на VPS на свой веб-сервер, разве это нельзя?
если вы его(oracle) не продавали, хотя есть express(помоему так называется)версия, бесплатная. Я пока ещё ниразу не слышал, чтобы ктото из проверяющих, интересовался oracle.
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: хранимая процедура Vs fork (новый процесс)

Непрочитанное сообщение ProFTP » 2009-10-05 8:42:29

я вот как раз хотел оптимизировать DELETE

Есть таблица составных деталей с "древесной" структурой, т.е. код/код предка/название, например:

Код: Выделить всё

CREATE  tree (i, parent_id i, name c(10))
INSERT INTO tree VALUES (1,0,'Деталь1')
INSERT INTO tree VALUES (2,0,'Деталь2')
INSERT INTO tree VALUES (3,2,'Деталь3')
INSERT INTO tree VALUES (4,2,'Деталь4')
INSERT INTO tree VALUES (5,4,'Деталь5')
INSERT INTO tree VALUES (6,4,'Деталь6')
INSERT INTO tree VALUES (7,5,'Деталь7')
Как в такой таблице красиво сделать рекурсивное удаление всех потомков при удалении записи (чтобы при удалении детали №4 удалились детали №5,6,7)? И можно ли это сделать через ХП?


вот я это нашел... http://forum.foxclub.ru/read.php?29,400359,400507

например на Visual Foxpro:

Код: Выделить всё

DelTree (2)

PROCEDURE DelTree (tnID)
LOCAL laChilds[1], ln1
SELECT det_id FROM tree WHERE parent_id = m.tnID INTO ARRAY laChilds
FOR ln1 = 1 TO _TALLY
DelTree (laChilds[m.ln1])
ENDFOR
DELETE FROM tree WHERE det_id = m.tnID
ENDPROC
но как написать это на MySQL, например, на триггерах или процедурах? или без них?

не могу понять как это сделать вообще, путаюсь...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение