Czym dokładnie jest Arel w Railsach 3.0?
Jest to model obiektowy dla algebry relacyjnych operatorów zapytań.
Rozumiem, że jest to zamiennik ActiveRecord
Nie, nie jest. Jest to zamiennik ręcznego tworzenia zapytań SQL w łańcuchach. Jest to typowa warstwa zapytań, która leży u podstaw ActiveRecord, ale może być również używana na przykład jako podstawa dla DataMapper.
Jeśli coś zastępuje, zastępuje Ambition. Możesz też myśleć o tym jako o wersji Ruby standardowych operatorów zapytań LINQ lub SQLAlchemy języka Python. (W rzeczywistości autor jawnie cytuje zarówno LINQ, jak i SQLAlchemy jako inspirację).
Lub możesz zobaczyć to jako zamiennik named_scope
s. W rzeczywistości ARel jest w dużej mierze urzeczywistnieniem idei, że „każde zapytanie jest named_scope
”. No i co wiesz: oba zostały napisane przez tego samego faceta.
i że używa obiektów zamiast zapytań.
Nie, używa obiektów jako zapytań.
dlaczego tak jest lepiej
Ruby jest językiem zorientowanym obiektowo, a nie ze zorientowanym na łańcuchy. Z tego powodu sam , ma sens do reprezentowania zapytań jako obiekty zamiast strun. Zbudowanie odpowiedniego modelu obiektowego dla zapytań zamiast używania łańcuchów do wszystkiego daje prawie takie same korzyści, jakie daje zbudowanie odpowiedniego modelu obiektowego dla systemu księgowego zamiast używania łańcuchów do wszystkiego.
Kolejną dużą zaletą jest to, że ARel implementuje rzeczywistą algebrę operatorów zapytań. Innymi słowy, ARel wie o matematycznych zasadach konstruowania i komponowania zapytań. Jeśli połączysz dwa ciągi, z których każdy zawiera prawidłowe zapytanie SQL, wynikiem prawdopodobnie nie będzie prawidłowe zapytanie SQL. Lub, co gorsza, jest to prawidłowe zapytanie SQL, ale takie, które nie ma sensu lub robi coś zupełnie innego niż myślisz, że robi. To nigdy się nie zdarzy w przypadku ARel. (To właśnie oznacza artykuł, do którego odsyłam poniżej, jako „zamknięty w kompozycji”).
czy obiekty / zapytania będą „łatwiejsze” do tworzenia?
Tak. Na przykład, jak wspomniałem powyżej, znacznie łatwiej jest tworzyć 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 przeprowadzać optymalizacje tych zapytań na długo przed wygenerowaniem rzeczywistego zapytania SQL.
czy będzie kompatybilny ze wszystkimi głównymi bazami danych? - Zakładam, że tak.
Tak. W rzeczywistości zawsze mówiłem o SQL powyżej, ale w rzeczywistości relacyjna algebra zapytań może generować zapytania dla prawie wszystkiego. Ponownie zobacz LINQ lub Ambition jako przykłady: oba mogą wykonywać zapytania SQL, LDAP, ActiveResource, CouchDB, Amazon, Google,… wszystkie z tą samą składnią.
Być może najlepszą dyskusją na temat tego, czym jest ARel i dlaczego napisał Nick Kallen, jest trafnie nazwany artykuł Why Arel? przez samego Nicka Kallena . Uwaga: artykuł zawiera łagodny żargon matematyczny i informatyczny, ale o to właśnie chodzi: ARel ma mocne podstawy w matematyce i informatyce, to właśnie te podstawy nadają mu potężne właściwości.
ARel jest niestety bezpośrednio powiązany z generowaniem kodu SQL i dlatego jest nieodpowiedni dla potrzeb DataMapper.
Sposób, w jaki bym to określił, jest taki, że ARel jest jawnym modelem zapytań dla ActiveRecord, który generuje i optymalizuje zapytania SQL dla RDBMS.
Z drugiej strony DataMapper jest prawdziwym maperem danych i może już współpracować z nierelacyjnymi magazynami danych. W przyszłości DataMapper prawdopodobnie będzie zawierał oddzielną bibliotekę o nazwie Veritas, która ma zapewnić funkcje relacyjne dla danych pochodzących z DOWOLNEGO magazynu danych, a nie tylko systemów RDBMS.
źródło
Arel w Railsach 3 tworzy obiekty relacji, w których baza danych nie jest odpytywana, dopóki jej nie potrzebujesz. Dużo bardziej wydajne.
Jest też bardziej naturalny (kiedy już się do tego przyzwyczaisz), co jest naprawdę wielką zaletą Railsów.
źródło
Właściwie zacząłem serię filmów na temat ActiveRelation.
Pierwszy ogólny samouczek można obejrzeć pod adresem http://Innovative-Studios.com/#pilot
źródło