Comments on: Using sub-queries to avoid multiple DB requests in Rails https://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/ In my blog I'll try to describe about interesting technologies, my discovery in IT and some useful things about programming. Tue, 08 Sep 2015 00:09:46 +0000 hourly 1 https://wordpress.org/?v=6.7.1 By: Roman Dmytrenko https://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/comment-page-1/#comment-47132 Wed, 16 May 2007 11:43:09 +0000 http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47132 Мог бы просто ответить, что кеширование есть :). К чему какие подробности.

]]>
By: Dmytro Shteflyuk https://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/comment-page-1/#comment-47128 Wed, 16 May 2007 11:34:11 +0000 http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47128 2Roman:

1
2
3
4
5
6
7
8
9
10
# Выбираем видео
@video = Video.find :first
# Загружаем категории отдельным запросом
@video.categories
# Здесь категории юзаются уже загруженные
# дополнительного запроса нет
@video.categories
# Здесь форсируем загрузку категорий
# повторый запрос к базе
@video.categories(true)

Ответил?

]]>
By: Dmytro Shteflyuk https://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/comment-page-1/#comment-47124 Wed, 16 May 2007 11:23:24 +0000 http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47124 Ты все переставил местами :-) SQL ассоциируется с ассемблером, как Ruby ассоциируется с PHP. Эдакая пропорция. Может немного преувеличено, но смысл такой.

Я не вижу преимущества у следующего кода (PHP, для простоты, именно то, что я назвал “ассемблером”)

1
2
3
4
5
6
7
8
9
10
11
$rs = $db->fetch_all('SELECT v.id AS v_id, v.title AS v_title, c.id AS c_id, c.name AS c_name FROM videos v JOIN categories_videos cv ON v.id = cv.video_id JOIN categories c ON c.id = cv.category_id LIMIT 20')
$old_post_id = 0;
$posts = array();
foreach ($rs as $row) {
  if ($old_post_id != $row['v_id']) {
    $post = array('id' => $row['v_id'], 'title' => $row['v_title'], 'categories' => array());
    $posts[] = $post;
    $old_post_id = $post['id'];
  }
  $post['categories'][] = array('id' => $row['c_id'], 'name' => $row['c_name']);
}

(код я не проверял, скорее всего не работает) перед кодом на руби с использованием рельсов:

1
Video.find :all, :include => :categories, :limit => 20

Да, не надо меня пинать на тему, что под пхп есть куча фреймворком и мой код не имеет смысла. Просто попробуйте руби и вы не сможете остановиться.

ЗЫ. Приведенный код имеет несколько проблем. Во-первых, я выбрал не все поля (у меня в таблице их десяток), во-вторых использовал LIMIT в SQL, что нельзя использовать в других СУБД, потому еще надо долепить условий. Ну и никаких WHERE тоже не приводил, потому что надоело писать.

]]>
By: Roman Dmytrenko https://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/comment-page-1/#comment-47122 Wed, 16 May 2007 11:18:14 +0000 http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47122 Честно говоря, Вы можете не осознавать всю работу ORM фреймворка для того, чтобы работать с ним. К тому же вопрос о гибких запросов к базе данных должен подыматься только в случае необходимости. В большинстве случаем мы делаем большую ошибку, начиная думать об оптимизации.

Только после нескольких предварительных релизов и более менее установлении архитектуры, можно думать об оптимизации SQL запросов. А так получается – еще ничего не сделали, зато уже хотим оптимизировать.

Кстати, как с кешированием выборок в RoR?

]]>
By: Alex https://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/comment-page-1/#comment-47118 Wed, 16 May 2007 10:56:48 +0000 http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47118 Обижаться конечно же не стану, не для того вопрос задал.
Обязательно попытаюсь узнать что такое Ruby и с чем эти вкусности едят :).
Ну а по поводу сложности и рутины – не зная как устроены эти самые классы (их ведь писали люди для упрощения каких-то своих задач) не сможешь понять как они работают. Я вот смотрю на эти запросы и со своим приверженством чтоли к языкам так-называемого “среднего уровня”, не понимаю чего хотел программист получить, без обид :).
Приятно конечно осознать, что SQL у кого-то ассоциируется с ассемблером, но все же SQL также написан для людей (не как ассемблер – словесное представление машинных кодов) и надеюсь, что Active Record (как всеже дополнительное звено) не является помехой для конструирования гибких запросов к базе данных.
Не сочти за критику, это лишь мое первое представление, обещаю ознакомиться с Active Record.

]]>
By: Dmytro Shteflyuk https://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/comment-page-1/#comment-47077 Wed, 16 May 2007 09:04:49 +0000 http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47077 Этот таинственный язык — Ruby. Данная заметка посвящена использованию Ruby on Rails (фрейморка), в частности Active Record (ORM этого фреймворка).

Твой воспрос не особо корректен. Это то же самое, что спросить “Зачем использовать ПХП и почему нельзя использовать классический ассемблер?” (без обид, ничего личного) :-)

Active Record берет на себя все сложности (и рутину) составления типовых SQL-запросов, а также конструирует объекты (сущности) вашего приложения из результатов запроса. В общем много всяких вкусностей, настоятельно рекомендую хотя бы посмотреть (скринкаст можно найти на официальном сайте Ruby on Rails) или почитать что-нибудь об этом фреймворке, даже если не собираетесь его использовать.

]]>
By: Alex https://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/comment-page-1/#comment-47072 Wed, 16 May 2007 08:49:03 +0000 http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47072 Вопрос чисто из любопытства :)
Какой язык используется в этом примере и почему нельзя было использовать классический SQL запрос с оператором JOIN?

]]>
By: Julik https://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/comment-page-1/#comment-35513 Fri, 13 Apr 2007 14:02:51 +0000 http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-35513 Sure thing.

http://bugs.mysql.com/bug.php?id=9021

]]>