Czym dokładnie jest Arel w Rails 3.0?

Rozumiem, że jest to zamiennik ActiveRecord i że używa obiektów zamiast zapytań.

Ale...

Dlaczego tak jest lepiej?

Czy obiekty / zapytania będą "łatwiejsze" do tworzenia?

Czy doprowadzi to do wydajniejszych zapytań SQL?

Czy będzie kompatybilny ze wszystkimi głównymi DBs? - Zakładam, że tak.

Czy będzie łatwiej/trudniej korzystać z procedur przechowywanych?

Author: John Topley, 2010-05-05

4 answers

Czym dokładnie jest Arel w Rails 3.0?

Jest to model obiektowy algebry relacyjnych operatorów zapytań.

Rozumiem, że jest to zamiennik dla ActiveRecord

Nie, Nie Jest. to zamiennik ręcznego tworzenia zapytań SQL w ciągach. Jest to popularna warstwa zapytań, która leży u podstaw ActiveRecord, ale może być również używana jako podstawa dla DataMapper, na przykład.

Jeśli jest zamiennikiem czegokolwiek, to zastąpienie ambicji. Można go też traktować jako wersję Ruby standardowych operatorów zapytań LINQ lub Pythona SQLAlchemy. (W rzeczywistości autor wyraźnie cytuje zarówno LINQ, jak i SQLAlchemy jako inspiracje.)

W rzeczywistości ARel jest w zasadzie realizacją idei, że "każde zapytanie jest named_scope". I, whaddayaknow: oba zostały napisane przez tego samego faceta.

I że używa obiektów zamiast zapytań.

Nie, to używa obiektów jako zapytań.

Dlaczego tak jest lepiej?

Ruby jest językiem obiektowym, nie zorientowanym na ciągi znaków. Z tego samego powodu , sensowne jest reprezentowanie zapytań jako obiektów zamiast łańcuchów. Budowanie właściwego modelu obiektowego dla zapytań zamiast używania ciągów do wszystkiego daje prawie takie same korzyści, jak budowanie właściwego modelu obiektowego dla systemu księgowego zamiast używania ciągów do wszystkiego daje ty.

Kolejną dużą zaletą jest to, że ARel implementuje rzeczywistą algebrę operatorów zapytań. Innymi słowy, ARel zna matematyczne zasady konstruowania i komponowania zapytań. Jeśli połączysz dwa ciągi znaków, z których każdy zawiera poprawne zapytanie SQL, prawdopodobnie wynik nie będzie prawidłowym zapytaniem SQL. Albo, co gorsza, to jest poprawne zapytanie SQL, ale takie, które nie ma sensu, lub które robi coś zupełnie innego niż myślisz, że robi. To może nigdy zdarzyć się z ARel. (To właśnie artykuł, do którego linkuję poniżej, oznacza "zamknięty pod kompozycją".)

Czy obiekty / zapytania będą "łatwiejsze" do tworzenia?

Tak. Na przykład, jak wspomniałem powyżej, o wiele łatwiej jest konstruować bardziej złożone zapytania z prostszych części.

Czy doprowadzi to do wydajniejszych zapytań SQL?

Tak. Fakt, że ARel ma odpowiedni model obiektowy dla zapytań oznacza, że może wykonywać optymalizacje tych zapytań na długo przed wygenerowaniem rzeczywistego zapytania SQL.
Czy będzie kompatybilny ze wszystkimi głównymi DBs? - Zakładam, że tak.
Tak. W rzeczywistości zawsze mówiłem o SQL powyżej, ale w rzeczywistości Algebra zapytań relacyjnych może generować zapytania dla prawie wszystkiego. Ponownie, zobacz LINQ lub Ambition jako przykłady: oba mogą odpytywać SQL, LDAP, ActiveResource, CouchDB, Amazon, Google, ... wszystkie z tą samą składnią.

Być może najlepsza dyskusja na temat czym jest ARel i dlaczego Nick Kallen napisał jest trafnie nazwany artykuł Dlaczego Arel? by Nick Kallen we własnej osobie. Uwaga: artykuł zawiera trochę łagodnego żargonu matematycznego i informatycznego, ale o to właśnie chodzi: ARel ma pewne mocne podstawy w matematyce i informatyce, te podstawy nadają mu potężne właściwości.

 179
Author: Jörg W Mittag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-05 08:18:23

ARel, niestety jest związany bezpośrednio z generowaniem SQL i dlatego nie nadaje się do potrzeb DataMapper.

Ująłbym to tak, że ARel jest jawnym modelem zapytań dla ActiveRecord, który generuje i optymalizuje zapytania SQL dla RDBMSes.

DataMapper z drugiej strony jest prawdziwym maperem danych i może już łączyć się z nie relacyjnymi magazynami danych. W przyszłości DataMapper będzie prawdopodobnie zawierać oddzielną bibliotekę o nazwie Veritas, która ma zapewnić funkcje relacyjne do danych pochodzących z dowolnego magazynu danych, a nie tylko z Rdbmse.

 19
Author: knowtheory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-26 00:35:33

Arel w Rails 3 tworzy obiekty relacji, w których db nie jest pytane, dopóki tego nie potrzebujesz. O wiele bardziej wydajny.

Jest też bardziej naturalny (gdy się do niego przyzwyczaisz) , co jest naprawdę wielką siłą Railsów.

 1
Author: BServiss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-14 22:02:01

Właściwie zacząłem serię filmów o ActiveRelation.

Pierwszy poradnik ogólny można obejrzeć pod adresem http://Innovative-Studios.com/#pilot

 0
Author: Snuggs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-08 17:07:11