Что такое точно Arel в направляющих 3.0?

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

Но...

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

объекты/запросы будет "легче" создать?

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

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

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

85
задан John Topley 5 May 2010 в 08:17
поделиться

4 ответа

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

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

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

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

Если это замена чему-либо, то это замена Амбициям. Или вы можете думать об этом как о 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 имеет некоторые прочные основы в математике и информатике, именно эти основы придают ему его мощные свойства.

182
ответ дан 24 November 2019 в 08:14
поделиться

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

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

0
ответ дан 24 November 2019 в 08:14
поделиться

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

Я бы сказал так: ARel - это явная модель запросов для ActiveRecord, которая генерирует и оптимизирует SQL-запросы для РСУБД.

DataMapper, с другой стороны, является настоящим маппером для данных и уже может взаимодействовать с нереляционными хранилищами данных. В будущем DataMapper, вероятно, будет включать отдельную библиотеку под названием Veritas, которая предназначена для обеспечения реляционной функциональности данных, полученных из ЛЮБОГО хранилища данных, а не только из РСУБД.

19
ответ дан 24 November 2019 в 08:14
поделиться

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

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

1
ответ дан 24 November 2019 в 08:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: