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

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

Но...

почему это лучше?

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

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

совместим ли он со всеми основными БД? - Я предполагаю, что это будет.

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

+83
источник поделиться
4 ответа

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

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

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

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

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

Или вы можете увидеть его как замену для named_scope s. Фактически, AREL в значительной степени представляет собой идею о том, что "каждый запрос является named_scope". И, whaddayaknow: оба были написаны одним и тем же парнем.

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

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

почему это лучше?

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

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

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

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

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

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

совместим ли он со всеми основными БД? - Я предполагаю, что это будет.

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

Возможно, лучшее обсуждение того, что такое AREL и почему написал Nick Kallen, - это точно названная статья Почему Arel? Ником Калленом. Примечание. В статье содержится небольшой мягкий математический и информационный жаргон, но это точно так же: у AREL есть некоторые прочные основы в математике и информатике, эти основы - вот что дает ему его мощные свойства.

+179
источник

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

Как я бы сказал, AREL - это явная модель запроса для ActiveRecord, которая генерирует и оптимизирует SQL-запросы для RDBMS.

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

+19
источник

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

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

+1
источник

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

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

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос