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

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

но...

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

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

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

будет ли он совместим со всеми основными DBs? - Полагаю, так и будет.

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

4 ответов


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

будет ли он совместим со всеми основными DBs? - Полагаю, так и будет.

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

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


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

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

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


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

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


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

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