Ответ 1
Что такое 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 есть некоторые прочные основы в математике и информатике, эти основы - вот что дает ему его мощные свойства.