Готов ли ActiveRelation к прайм-тайму? - PullRequest
2 голосов
/ 03 мая 2011

Я только учусь рельсам.Мне так нравится в Rails.Это полностью разрушает Java и связанные с ним решения для повышения производительности почти во всех случаях - и я действительно очень быстр в Java с более чем десятилетним опытом ... так что это говорит о чем-то!Если рельсы не делают этого, есть драгоценный камень, который поражает мой разум, насколько он продуктивен.

Тогда есть Активные отношения.Я очень стараюсь использовать это в качестве основного подхода к запросу, но это не нужно.Я обнаружил, что, как только я начинаю создавать запросы, требующие 2-х объединений, я начинаю получать странные сообщения об ошибках, которые не имеют смысла ... и, честно говоря, все области могут быть трудными для рассуждения.

Хотя этот подход может сделать вещи более читабельными, я думаю, что затраты на рассуждение о том, что происходит с точки зрения общей картины ... и стоимость написания запроса ... вероятно, не окупаютсясам.Если вы действительно хорошо разбираетесь в sql ... или в языке, подобном hql ..., такой способ - это потеря производительности.По крайней мере, это для меня.

Я мог бы жить с этим, но я не могу заставить работать вложенное соединение.Например, если у меня A <-> B <-> C, а B - это модель, которая также является отношением «многие ко многим», ActiveRelation жалуется, что имя одного из внешних ключей неверно ... даже если онона самом деле правильно.Я думаю, что это ошибка.Все запросы, которые выполняют одиночные объединения с использованием областей, работают безупречно ... но если вы объедините те же самые области, чтобы сделать 2 объединения, произойдет сбой.Я не вижу способа исправить это.

Я мог бы сделать только одно из объединений, а затем позволить ORM сделать все остальное за меня ... но это будет такая пустая трата производительности.Это закончится катастрофой для большого сайта.Я пишу огромную систему, которая хранит огромные деревья реляционных данных тысячами за запрос.Обход графика с использованием ORM - это слишком большой фактор снижения производительности, поэтому я даже не буду беспокоиться о том, чтобы продолжать кодировать остальную часть приложения.Возможно, мне придется вернуться к Java, если это так.

Кроме того, я не могу найти в сети примеров множественных объединений.Даже документация вряд ли упоминает объединения и слияния вообще.

Итак ... он готов к прайм-тайм?Как сделать действительно сложные соединения 7-9 таблиц в Rails?Rails просто не создан для этого?Я спрашиваю об этом только потому, что если Rails не может справиться с такими запросами, мне, к сожалению, придется прекратить их использовать ... и поверьте мне ... это огромный, настоящий позор ... потому что я абсолютно ЛЮБЛЮ все остальное.Я действительно надеюсь, что я просто неправ, и все в порядке.

1 Ответ

3 голосов
/ 03 мая 2011

Сказать по правде, я могу немного рассказать, но правда в том, что мы в большинстве случаев не знаем, как справляться с проблемами и разочаровываться.Rails, с его крутой кривой обучения, является отличным примером этого :) Я пытался сделать левое внешнее объединение один раз, и это выглядело очень грязно, только чтобы узнать, что я могу сделать это более чистым способом.

Rails может на самом деле делать все виды объединений, как только вы научитесь инструктировать его (и это действительно может быть проблемой, исходя из моего опыта).

Что я обнаружил, так это то, что использованиеРубин иногда делает процедуру проще.Маленькая карта может просто спасти все это.

Однако, когда вы не можете что-то сделать, это не потому, что Rails не справляется с этим, а потому, что у вас еще нет знаний, чтобы сделать это должным образом.Rails сложен, и некоторые вещи кажутся очень неясными, просто потому, что вы сначала о них не знаете.

Что касается A, B, C, все должно работать нормально.Вполне вероятно (если не уверен), что вы делаете что-то неправильно при именовании ваших ключей (вы можете быть на 100% уверены, что это не ошибка Rails:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...