Что такое Arel в Rails 3.0?
Это объектная модель для алгебры операторов реляционных запросов.
Я понимаю, что это замена ActiveRecord
Нет, это не так. Это замена для ручной обработки SQL-запросов в строках. Это общий уровень запросов, который лежит в основе ActiveRecord, но его также можно использовать, например, как основу для DataMapper.
Если это замена чего-либо, это замена Амбиции. Или вы можете думать об этом как о версии Ruby стандартных операторов запросов LINQ или SQLAlchemy Python. (На самом деле автор явно ссылается на LINQ и SQLAlchemy в качестве источника вдохновения.)
Или, вы можете увидеть это как замену named_scope
с. Фактически, ARel - это в значительной степени реализация идеи, что «каждый запрос - это named_scope
». И, что ж, знаю: оба были написаны одним и тем же парнем.
и что он использует объекты вместо запросов.
Нет, он использует объекты в качестве запросов.
почему это лучше?
Ruby - это объектно-ориентированный язык, а не строковый. По этой причине только имеет смысл представлять запросы в виде объектов, а не строк. Построение правильной объектной модели для запросов вместо использования строк для всего дает в значительной степени те же преимущества, что и создание правильной объектной модели для системы учета вместо использования строк для всего.
Еще одним большим преимуществом является то, что ARel реализует алгебру операторов запросов. Другими словами, ARel знает о математических правилах для построения и составления запросов. Если вы объедините две строки, каждая из которых содержит действительный запрос SQL, результатом, вероятно, не будет действительный запрос SQL. Или, что еще хуже, - это действительный запрос SQL, но тот, который не имеет смысла, или делает что-то совершенно отличное от того, что вы думаете. Это может никогда не случиться с ARel. (Это то, что в статье, на которую я ссылаюсь ниже, означает «закрытая композиция».)
Будет ли легче создавать объекты / запросы?
Да. Например, как я упоминал выше, гораздо проще составлять более сложные запросы из более простых частей.
приведет ли это к более эффективным запросам SQL?
Да. Тот факт, что ARel имеет подходящую объектную модель для запросов, означает, что он может выполнять оптимизацию этих запросов задолго до того, как он генерирует фактический запрос SQL.
будет ли он совместим со всеми основными БД? - Я предполагаю, что это будет.
Да. Фактически, я всегда говорил о SQL выше, но на самом деле алгебра реляционных запросов может генерировать запросы практически для всего. Опять же, смотрите LINQ или Ambition в качестве примеров: оба могут запрашивать SQL, LDAP, ActiveResource, CouchDB, Amazon, Google и & hellip; все с одинаковым синтаксисом.
Возможно, лучшая дискуссия о том, что такое ARel и почему написал Ник Каллен, - это метко названная статья Почему Арел? самого Ника Каллена . Примечание: в статье содержится небольшой мягкий математический и компьютерный жаргон, но в этом и заключается суть: у ARel есть некоторые прочные основы в математике и компьютерных науках, именно они дают ему мощные свойства.