Що таке Arel in Rails 3.0?
Це об’єктна модель для алгебри операторів реляційних запитів.
Я розумію, що це заміна ActiveRecord
Ні, це не так. Це заміна ручної обробки SQL-запитів у рядках. Це загальний рівень запиту, який лежить в основі ActiveRecord, але його також можна використовувати як підґрунтя для DataMapper, наприклад.
Якщо це будь-яка заміна, це заміна Ambition. Або ви можете сприймати це як версію Ruby стандартних операторів запитів LINQ або SQLAlchemy Python. (Насправді автор наводить як LINQ, так і SQLAlchemy як натхнення.)
Або ви можете розглядати це як заміну named_scope
s. Насправді ARel є майже реалізацією ідеї, що "кожен запит - це named_scope
". І, whaddayaknow: обидва написані одним і тим же хлопцем.
і що він використовує об’єкти замість запитів.
Ні, він використовує об’єкти як запити.
чому це краще?
Ruby є об'єктно-орієнтованою мовою, а не мовою, орієнтованою на рядки. З цієї причини в поодинці , має сенс подавати запити в вигляді об'єктів замість рядків. Створення належної об'єктної моделі для запитів замість використання рядків для всього дає майже такі ж переваги, як і створення належної об'єктної моделі для облікової системи замість використання рядків для всього.
Ще однією великою перевагою є те, що ARel реалізує фактичну алгебру операторів запитів. Іншими словами, ARel знає про математичні правила побудови та складання запитів. Якщо ви об'єднаєте два рядки, кожен з яких містить допустимий запит SQL, результат, ймовірно, не буде дійсним запитом SQL. Або, що ще гірше, це є допустимим запит SQL, але один , який не має сенсу, або що робить що - щось зовсім відмінне від того, що ви думаєте , що він робить. З ARel цього ніколи не може статися. (Це те, що стаття, на яку я посилаюся нижче, означає "закрита під композицією".)
чи буде "простіше" створювати об'єкти / запити?
Так. Наприклад, як я вже згадував вище, набагато простіше побудувати більш складні запити з більш простих частин.
чи це призведе до більш ефективних запитів SQL?
Так. Той факт, що ARel має належну об'єктну модель для запитів, означає, що він може виконувати оптимізацію цих запитів задовго до того, як коли-небудь генерує фактичний запит SQL.
чи буде він сумісним з усіма основними БД? - Я припускаю, що буде.
Так. Насправді, я завжди говорив про SQL вище, але насправді реляційна алгебра запитів може генерувати запити майже для всього. Знову ж, див. LINQ або Ambition як приклади: обидва можуть запитувати SQL, LDAP, ActiveResource, CouchDB, Amazon, Google,… з однаковим синтаксисом.
Мабуть, найкращою дискусією щодо того, що таке ARel і чому писав Нік Каллен, є доречно названа стаття Why Arel? самим Ніком Калленом . Примітка: стаття містить деякий м'який математичний та інформатичний жаргон, але саме в цьому полягає суть: ARel має кілька міцних основ в математиці та інформатиці, саме ці основи надають йому його потужні властивості.