Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Базы данных > Ruby+Oracle, OCI8: дико медленно


Автор: maep 27.6.2008, 09:54
Господа, еще один вопросик.

Есть база оракла. руби, оси8.

Делаю так:
Код


conn = OCI8.new('zh', 'forest', 'bp_test3')
 conn.exec('select account_id from account where account_id < 100000') do |r| 
   c = r[0]
  end



в PL\SQL делаю так:
Код


DECLARE
  aa NUMBER;
BEGIN
  FOR rec IN (SELECT * FROM account a WHERE a.account_id < 100000)
  LOOP
    aa := rec.account_id;
  END LOOP;
END;


вроде одно и то же.
Время выполнения программы руби в 20 (двадцать) раз больше, чем pl\sql. Понятно, что pl\sql быстрее будет работать,
но не в 20 же раз... смущает такой разброс.

Наличие вложенных запросов в цикле усугубляет ситуацию. В чем может быть проблема, или это норма и "не лечится"?

Заранее спасибо


Автор: Grengo 15.2.2009, 02:37
Насколько я знаю руби достаточно медленный язык как таковой. На том же пхп делал запросы в SQL и все работало шустро. Даже очень шустро... Если для вас Это дело принципа, то из дельного знаю только то, что с базами надо работать на рельсах, т.е. эээ  RoR.

Автор: source777 18.2.2009, 23:00
Grengo, не троли, в данном случае вопрос к Руби вообще отношения не имеет, скорость запросов к БД определяется:
1) запросом
2) скоростью соединения с БД
3) адаптером (в данном случае OCI)
4) ну и самой СУБД

Что касается Oracle, то как показывает практика это самая медлительная из всех пропиаренных СУБД, так что если хочешь использовать Oracle, то твой выбор PL/SQL, на других языках работа с Oracle только в тягость...

Цитата(maep @  27.6.2008,  09:54 Найти цитируемый пост)
В чем может быть проблема, или это норма и "не лечится"?

лечится это заменой Oracle на MySQL  smile 

Автор: fixxer 19.2.2009, 00:07
Цитата(source777 @ 18.2.2009,  23:00)
Что касается Oracle, то как показывает практика это самая медлительная из всех пропиаренных СУБД

 smile Ой, насмешил

Вообще Oracle всегда считался одной из самых быстрых СУБД, причем на огромных объемах. Также известно, что она очень капризна в настройка и в неграмотных руках может вести себя неадекватно по производительности. Так что топикстартеру стоит привести DDL, индексы, объем данных, и сколько возвращается запросом. Сравнивать удаленный вызов с PL/SQL, работающим внутри базы, вообще некорректно. Может все время чисто на фетчинг и сжирается.

Автор: source777 19.2.2009, 12:55
Цитата(fixxer @  19.2.2009,  00:07 Найти цитируемый пост)
Вообще Oracle всегда считался одной из самых быстрых СУБД, причем на огромных объемах. 
На огромных может быть, на небольших объёмах она жутко тормозит... не всем же нужны таблицы по 10 Гб, да и для них я лично лучше PostgeSQL возьму, хотя о вкусах не спорят...

Автор: Grengo 22.3.2009, 17:42
Цитата(source777 @  18.2.2009,  23:00 Найти цитируемый пост)
Grengo, не троли, в данном случае вопрос к Руби вообще отношения не имеет, скорость запросов к БД определяется:1) запросом


Вот-вот ) Но судя по "запросу" автора сложно сказать что там нечто объёмное. Затем следущее - Время выполнения программы руби в 20 (двадцать) раз больше, чем pl\sql. Это слова самого же автора. Т.е. нужно учитывать и то насколько быстро обработчик руби всё это дело поймёт, обработает, и отошлёт в базу в приемлемом для неё виде. И кто сказал что руби адаптирована под эти базы? Я знаю (как и многие), что для руби есть RoR, как я уже говорил, т.е. собственная разработка, и видел гайды в которых учат работать с рельсами. И там всё быстро, просто и наглядно.
П.С. и всё таки руби - медленный язык. Это из-за его "высокоуровневости" 8)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)