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