Was genau ist Arel in Rails 3.0?
Es ist ein Objektmodell für eine Algebra relationaler Abfrageoperatoren.
Ich verstehe, dass es ein Ersatz für ActiveRecord ist
Nein, ist es nicht. Es ist ein Ersatz für die manuelle Erstellung von SQL-Abfragen in Zeichenfolgen. Es ist eine allgemeine Abfrageebene, die ActiveRecord zugrunde liegt , sie kann jedoch auch als Grundlage für DataMapper verwendet werden.
Wenn es ein Ersatz für irgendetwas ist, ist es ein Ersatz für Ambition. Sie können es sich auch als Ruby-Version der LINQ-Standardabfrageoperatoren oder der SQLAlchemy von Python vorstellen. (Tatsächlich zitiert der Autor sowohl LINQ als auch SQLAlchemy ausdrücklich als Inspirationen.)
Oder Sie können es als Ersatz für named_scope
s sehen. In der Tat ist ARel so ziemlich die Verwirklichung der Idee, dass "jede Abfrage eine ist named_scope
". Und, whaddayaknow: Beide wurden von demselben Typen geschrieben.
und dass es Objekte anstelle von Abfragen verwendet.
Nein, es werden Objekte als Abfragen verwendet.
warum ist das besser
Ruby ist eine objektorientierte Sprache, keine stringorientierte Sprache. Aus diesem GrundAllein aus ist es sinnvoll, Abfragen als Objekte anstelle von Zeichenfolgen darzustellen. Das Erstellen eines geeigneten Objektmodells für Abfragen anstelle der Verwendung von Zeichenfolgen für alles bietet Ihnen nahezu dieselben Vorteile wie das Erstellen eines geeigneten Objektmodells für ein Buchhaltungssystem anstelle der Verwendung von Zeichenfolgen für alles.
Ein weiterer großer Vorteil ist, dass ARel eine tatsächliche Algebra von Abfrageoperatoren implementiert . Mit anderen Worten, ARel kennt die mathematischen Regeln zum Erstellen und Erstellen von Abfragen. Wenn Sie zwei Zeichenfolgen verketten, von denen jede eine gültige SQL-Abfrage enthält, ist das Ergebnis wahrscheinlich keine gültige SQL-Abfrage. Oder, noch schlimmer, es handelt sich um eine gültige SQL-Abfrage, die jedoch keinen Sinn ergibt oder etwas völlig anderes tut, als Sie denken. Das kann man nie mit ARel passieren. (Dies ist, was der Artikel, auf den ich unten verweise, mit "geschlossen unter Komposition" bedeutet.)
Werden Objekte / Abfragen "einfacher" zu erstellen sein?
Ja. Wie oben erwähnt, ist es beispielsweise viel einfacher, komplexere Abfragen aus einfacheren Teilen zu erstellen.
Wird dies zu effizienteren SQL-Abfragen führen?
Ja. Die Tatsache, dass ARel über ein geeignetes Objektmodell für die Abfragen verfügt, bedeutet, dass es Optimierungen für diese Abfragen durchführen kann, lange bevor jemals eine tatsächliche SQL-Abfrage generiert wird.
Wird es mit allen wichtigen DBs kompatibel sein? - Ich gehe davon aus, dass es so sein wird.
Ja. Tatsächlich habe ich oben immer über SQL gesprochen, aber tatsächlich kann eine relationale Abfragealgebra Abfragen für so ziemlich alles generieren. Siehe auch LINQ oder Ambition als Beispiele: Beide können SQL, LDAP, ActiveResource, CouchDB, Amazon, Google usw. mit derselben Syntax abfragen.
Die vielleicht beste Diskussion darüber, was ARel ist und warum Nick Kallen schrieb, ist der treffend benannte Artikel Warum Arel? von Nick Kallen selbst. Hinweis: Der Artikel enthält eine milde Fachsprache für Mathematik und Informatik, aber genau das ist der Punkt: ARel hat einige starke Grundlagen in Mathematik und Informatik. Diese Grundlagen verleihen ihm seine starken Eigenschaften.