Php Vs Ruby

Dik

Хозяин
Команда форума
Администратор
Репутация
500 / 882
Вот тут задался вопросом что быстрее Ruby или PHP и решил перевести свой небольшой рабочий скрипт на Ruby и посмотреть.

Суть скрипта собрать данные с 3 MySQL сервер и записать на 4 под cron

Тест проводился на artaos (Debian 5.0)

Вот мои результаты
21ec36574d9f4ebb0c5df14e14524630.png

Разница PHP/Ruby
Время: 1.469304 (PHP)
CPU: 6.8% (PHP)
Память: 2.4 (Ruby)

Выдаваемый результат скрипта
<div class='codemain' style='height:200px;white-space:pre;overflow:auto'>require "mysql"
begin
DBNm = Array.new
DBNm[0] = "stcdata"
DBNm[1] = "stcdata"
DBNm[2] = "stcdata"
HostNm = Array.new
HostNm[0] = "192.168.13.5"
HostNm[1] = "192.168.15.221"
HostNm[2] = "192.168.16.50"
UsNm = Array.new
UsNm[0] = "voen_pas"
UsNm[1] = "voen_pas"
UsNm[2] = "voen_pas"
Pass = Array.new
Pass[0]="voya7341"
Pass[1]="voya7341"
Pass[2]="voya7341"

DBName="brep";#база
HostName="192.168.13.129";#сервер

UserName="dmitriy";#пользователь
Password="ScX5Rz7f";#пароль

t=Time.new
startsec=t.to_f


# connect to the MySQL server
m = Mysql.new(HostName, UserName, Password, DBName)

# get server version string and display it
#row = dbh.select_one("SELECT VERSION()")
#puts "Server version: " + row[0]

m.query("REPLACE INTO cron2 SET id=1, blok=1")
m.query("DELETE FROM `tpeodat2`")
m.query("DELETE FROM `tpeo2`")
m.query("DELETE FROM `tfuc2`")
m.query("DELETE FROM `tgrp2`")
m.query("DELETE FROM `trup2`")
m.query("DELETE FROM `tspe2`")

nook_tpd=0
ok_tpd=0
nook_tp=0
ok_tp=0
nook_tf=0
ok_tf=0
nook_tg=0
ok_tg=0
nook_tr=0
ok_tr=0
nook_ts=0
ok_ts=0
count_tpd=0
count_tp=0
error=0
servers=0
count_tf=0
count_tg=0
count_tr=0
count_ts=0
#pole_tpeodat=Array.new
#values_tpeodat=Array.new

DBNm.each_index do |x|
s = Mysql.new(HostNm[x], UsNm[x], Pass[x], DBNm[x]) rescue error=1
if error!=1
pole_tpeodat=Array.new
values_tpeodat=Array.new
r=s.query("SELECT tpd.* FROM tpeodat tpd, tpeo tp, tfuc tf WHERE tp.KOD=tpd.KOD AND tf.FKOD=tp.FKOD AND tf.WORK=1")
r.each_hash do |row|
k=Array.new
v=Array.new
row.each_pair do |key, val|
k<<key
v<<"'#{val}'"
end
pole_tpeodat<<k.join(', ')
values_tpeodat<<v.join(', ')
end
r.free

pole_tpeo=Array.new
values_tpeo=Array.new
r=s.query("SELECT tp.CMT, tp.FKOD, tp.FM, tp.IM, tp.OT, tp.GKOD, tp.GRNT, tp.KOD, tp.NZK, tp.PFLAG, tp.SKOD FROM tpeo tp, tpeodat tpd, tfuc tf WHERE tpd.KOD=tp.KOD AND tf.FKOD=tp.FKOD AND tf.WORK=1")
r.each_hash do |row|
k=Array.new
v=Array.new
row.each_pair do |key, val|
k<<key
v<<"'#{val}'"
end
pole_tpeo<<k.join(', ')
values_tpeo<<v.join(', ')
end
r.free

pole_tfuc=Array.new
values_tfuc=Array.new
r=s.query("SELECT * FROM tfuc WHERE WORK=1")
r.each_hash do |row|
k=Array.new
v=Array.new
row.each_pair do |key, val|
k<<key
v<<"'#{val}'"
end
pole_tfuc<<k.join(', ')
values_tfuc<<v.join(', ')
end
r.free

r=s.query("SELECT tp.GKOD as gk FROM tpeo tp, tpeodat tpd, tfuc tf WHERE tpd.KOD=tp.KOD AND tf.FKOD=tp.FKOD AND tf.WORK=1 GROUP BY tp.GKOD")
k=Array.new
r.each_hash do |row|
k<<"'#{row['gk']}'"
end
gkod=k.join(', ')

pole_tgrp=Array.new
values_tgrp=Array.new
r=s.query("SELECT * FROM tgrp WHERE GKOD IN(#{gkod})")
r.each_hash do |row|
k=Array.new
v=Array.new
row.each_pair do |key, val|
k<<key
v<<"'#{val}'"
end
pole_tgrp<<k.join(', ')
values_tgrp<<v.join(', ')
end
r.free

r=s.query("SELECT TRKOD FROM tgrp WHERE GKOD IN(#{gkod}) GROUP BY TRKOD")
k=Array.new
r.each_hash do |row|
k<<"'#{row['TRKOD']}'"
end
trkod=k.join(', ')

pole_trup=Array.new
values_trup=Array.new
r=s.query("SELECT * FROM trup WHERE TRKOD IN(#{trkod})")
r.each_hash do |row|
k=Array.new
v=Array.new
row.each_pair do |key, val|
k<<key
v<<"'#{val}'"
end
pole_trup<<k.join(', ')
values_trup<<v.join(', ')
end
r.free

r=s.query("SELECT SKOD FROM trup WHERE TRKOD IN(#{trkod}) GROUP BY SKOD")
k=Array.new
r.each_hash do |row|
k<<"'#{row['SKOD']}'"
end
skod=k.join(', ')

pole_tspe=Array.new
values_tspe=Array.new
r=s.query("SELECT * FROM tspe WHERE SKOD IN(#{skod})")
r.each_hash do |row|
k=Array.new
v=Array.new
row.each_pair do |key, val|
k<<key
v<<"'#{val}'"
end
pole_tspe<<k.join(', ')
values_tspe<<v.join(', ')
end
r.free

servers+=1

pole_tpeodat.each_index do |i|
count_tpd+=1
m.query("INSERT INTO tpeodat2 (#{pole_tpeodat}, server) VALUES(#{values_tpeodat}, #{x})") rescue error=1
if error==1
nook_tpd+=1
error=0
else
ok_tpd+=1
end
end

pole_tpeo.each_index do |i|
count_tp+=1
m.query("INSERT INTO tpeo2 (#{pole_tpeo}, server) VALUES(#{values_tpeo}, #{x})") rescue error=1
if error==1
nook_tp+=1
error=0
else
ok_tp+=1
end
end


pole_tfuc.each_index do |i|
count_tf+=1
m.query("INSERT INTO tfuc2 (#{pole_tfuc}, server) VALUES(#{values_tfuc}, #{x})") rescue error=1
if error==1
nook_tf+=1
error=0
else
ok_tf+=1
end
end

pole_tgrp.each_index do |i|
count_tg+=1
m.query("INSERT INTO tgrp2 (#{pole_tgrp}, server) VALUES(#{values_tgrp}, #{x})") rescue error=1
if error==1
nook_tg+=1
error=0
else
ok_tg+=1
end
end

pole_trup.each_index do |i|
count_tr+=1
m.query("INSERT INTO trup2 (#{pole_trup}, server) VALUES(#{values_trup}, #{x})") rescue error=1
if error==1
nook_tr+=1
error=0
else
ok_tr+=1
end
end

pole_tspe.each_index do |i|
count_ts+=1
m.query("INSERT INTO tspe2 (#{pole_tspe}, server) VALUES(#{values_tspe}, #{x})") rescue error=1
if error==1
nook_ts+=1
error=0
else
ok_ts+=1
end
end

else
puts "Сервер #{HostNm[x]} не доступен."
error=0
end




error=0
end

#m = Mysql.new(HostName, UserName, Password, DBName)
t=Time.new
m.query("REPLACE INTO cron2 SET id=1, date=#{t.to_i}, blok=0, servers=#{servers}")
puts "Отчет по tpeodat: Выбрано(#{count_tpd}), Записано(#{ok_tpd}), Не записано(#{nook_tpd})";
puts "Отчет по tpeo: Выбрано(#{count_tp}), Записано(#{ok_tp}), Не записано(#{nook_tp})";
puts "Отчет по tfuc: Выбрано(#{count_tf}), Записано(#{ok_tf}), Не записано(#{nook_tf})";
puts "Отчет по tgrp: Выбрано(#{count_tg}), Записано(#{ok_tg}), Не записано(#{nook_tg})";
puts "Отчет по trup: Выбрано(#{count_tr}), Записано(#{ok_tr}), Не записано(#{nook_tr})";
puts "Отчет по tspe: Выбрано(#{count_ts}), Записано(#{ok_ts}), Не записано(#{nook_ts})";
# disconnect from server
m.close if m

t=Time.new
endsec=t.to_f

totaltime=endsec-startsec
printf("Страница сгенерирована за %f секунд !\n", totaltime)

end


Везде пишут что Ruby быстрее но судя по тесту не верно. Так же пишут что Ruby 1.9 быстрее 1,8 Но 1,9 поставить пока не получилось. Так же попробую заменить некоторые циклы и глянуть)))
 
Везде пишут что Ruby быстрее но судя по тесту не верно. Так же пишут что Ruby 1.9 быстрее 1,8 Но 1,9 поставить пока не получилось. Так же попробую заменить некоторые циклы и глянуть)))
Возможно php скрипты быстрее в одних случаях, а ruby скрипты - в других.
 
PHP в любом случае быстрее..посмотри на % CPU
 
Спасибо за тест меня тоже уже давно терзал этот вопрос
 
Сверху