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


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

но...

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

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

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

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

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

4 83

4 ответа:

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

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

Я понимаю, что это замена для модели

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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