Что такое Arel в Rails 3.0?


86

Я понимаю, что это замена ActiveRecord и что он использует объекты вместо запросов.

Но...

почему так лучше?

будет ли "легче" создавать объекты / запросы?

приведет ли это к более эффективным SQL-запросам?

будет ли он совместим со всеми основными БД? - Думаю, будет.

будет ли проще / сложнее использовать хранимые процедуры?

Ответы:


182

Что такое Arel в Rails 3.0?

Это объектная модель для алгебры операторов реляционных запросов.

Я так понимаю, это замена ActiveRecord

Нет, это не так. Это замена строковым SQL-запросам, созданным вручную. Это общий уровень запросов, который лежит в основе ActiveRecord, но он также может использоваться, например, в качестве основы для DataMapper.

Если это замена чему-либо, то это замена Ambition. Или вы можете думать об этом как о Ruby-версии стандартных операторов запросов LINQ или Python SQLAlchemy. (Фактически, автор явно ссылается на LINQ и SQLAlchemy как на вдохновение.)

Или вы можете рассматривать его как замену named_scopes. Фактически, ARel в значительной степени является реализацией идеи о том, что «каждый запрос - это named_scope». И что ж, оба были написаны одним и тем же парнем.

и что он использует объекты вместо запросов.

Нет, он использует объекты как запросы.

почему так лучше?

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

Еще одно большое преимущество состоит в том, что ARel реализует настоящую алгебру операторов запросов. Другими словами, ARel знает математические правила построения и составления запросов. Если вы объедините две строки, каждая из которых содержит допустимый SQL-запрос, результат, вероятно, не будет правильным SQL-запросом. Или, что еще хуже, это является допустимым запрос SQL, но один , который не имеет смысла, или что делает что - то совершенно отличное от того, что вы думаете , что он делает. С ARel этого никогда не случится. (Это то, что в статье, на которую я ссылаюсь ниже, означает «закрыто по составу».)

будет ли "легче" создавать объекты / запросы?

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

приведет ли это к более эффективным SQL-запросам?

Да. Тот факт, что ARel имеет подходящую объектную модель для запросов, означает, что он может выполнять оптимизацию этих запросов задолго до того, как сгенерирует настоящий SQL-запрос.

будет ли он совместим со всеми основными БД? - Думаю, будет.

Да. Фактически, я всегда говорил о SQL выше, но на самом деле алгебра реляционных запросов может генерировать запросы практически для всего. Снова рассмотрим LINQ или Ambition в качестве примеров: оба могут запрашивать SQL, LDAP, ActiveResource, CouchDB, Amazon, Google,… все с одинаковым синтаксисом.

Возможно, лучшее обсуждение того, что такое ARel и почему написал Ник Каллен, - это статья с удачным названием « Почему Арел?». сам Ник Каллен . Примечание: статья содержит некоторый мягкий математический и компьютерный жаргон, но именно в этом суть: ARel имеет некоторые прочные основы в математике и информатике, именно эти основы придают ему его мощные свойства.


Отличный ответ. Я прочитал опубликованную вами ссылку и по большей части следил за ней. На самом деле, компьютерная часть имела смысл, но как она была встроена в рельсы, у меня были проблемы. Для меня гораздо больше смысла в том, что он заменяет созданный вручную SQL (или что-то еще) и, таким образом, AR построен поверх него в версии 3.0. У меня были разные впечатления от людей, которым следовало бы знать лучше, и этот ответ гениален тем, что дает простое и точное объяснение каждого вопроса выше.
Уилл

У меня есть еще один вопрос. Вы упомянули LDAP, AMZ и т.д. выше, я предполагаю, что в настоящее время (на основе rails / arel на github) ARel не имеет такой возможности, только потенциал? т.е. пока кто-нибудь не реализует эту часть. Хотя это звучит очень захватывающе.
Уилл

2
@Will - Я думаю, вам придется подождать, пока кто-нибудь разовьет эти забавные способности. Или попробуйте сами, если она вам понадобится?
Майк Вудхаус,

1
+1, хотя ссылка мертвая; наивный поиск не нашел текущую ссылку.
Дэйв Ньютон

@DaveNewton: Видимо, его больше нет. Вокруг плавают кешированные копии, например bmark.us/bmark/readable/913ff84fc0dcdc
Йорг В. Миттаг,

19

ARel, к сожалению, напрямую связан с генерацией SQL и поэтому не подходит для нужд DataMapper.

Я бы сказал, что ARel - это явная модель запросов для ActiveRecord, которая генерирует и оптимизирует запросы SQL для СУБД.

DataMapper, с другой стороны, является настоящим картографом для данных и уже может взаимодействовать с нереляционными хранилищами данных. В будущем DataMapper, вероятно, будет включать в себя отдельную библиотеку под названием Veritas, которая предназначена для обеспечения реляционной функциональности для данных, полученных из ЛЮБОГО хранилища данных, а не только из РСУБД.


2
Почему это получило -1?
Джерико

10
Я сопровождаю DataMapper, и то, что говорит теория знаний, правда. ARel в его текущей реализации не может использоваться под DataMapper, потому что он предоставляет только подмножество функций, необходимых для работы с более чем 40 хранилищами данных, которые поддерживает DM. IMHO текущая реализация тесно связана с генерацией SQL, и потребуется много работы, чтобы исправить API / внутренние компоненты для работы с хранилищами данных, существенно отличающимися от СУБД. ARel - это шаг вперед, но на данный момент он не может служить основой для чего-то большего, чем ActiveRecord.
dkubb 09

1

Arel в Rails 3 создает объекты отношений, в которых база данных не запрашивается, пока она вам не понадобится. Намного эффективнее.

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


0

Фактически я начал серию видео по ActiveRelation.

Первый общий учебник можно посмотреть на http://Innovative-Studios.com/#pilot


Видео мне тоже понравилось. Это было довольно просто, но я почерпнул несколько дополнительных сведений. Хотелось бы увидеть следующие видео!
Purplejacket
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.