86

これが ActiveRecord の代替であり、クエリの代わりにオブジェクトを使用することを理解しています。

しかし...

なぜこれが良いのですか?

オブジェクト/クエリの作成が「より簡単」になりますか?

より効率的な SQL クエリにつながるでしょうか?

すべての主要な DB と互換性がありますか? -そうなると思います。

ストアドプロシージャを使用する方が簡単/難しいですか?

4

4 に答える 4

182

Rails 3.0 の Arel とは正確には何ですか?

これは、リレーショナル クエリ演算子の代数のオブジェクト モデルです。

ActiveRecord の代替品であることを理解しています

いいえ、そうではありません。これは、文字列で SQL クエリを手作りするための代替品です。これは ActiveRecord の基盤となる一般的なクエリ レイヤーですが、たとえば DataMapper の基盤としても使用できます。

何かの代わりになるとすれば、それはアンビションの代わりです。または、LINQ 標準クエリ演算子または Python の SQLAlchemy の Ruby バージョンと考えることができます。(実際、著者は明示的に LINQ と SQLAlchemy の両方をインスピレーションとして挙げています。)

または、s の代わりと見なすこともできますnamed_scope。実際、ARel は「すべてのクエリはnamed_scope. そして、なんてこった、両方とも同じ人によって書かれました。

クエリの代わりにオブジェクトを使用します。

いいえ、オブジェクトクエリとして使用します。

なぜこれが良いのですか?

Ruby はオブジェクト指向言語であり、文字列指向言語ではありません。その理由だけでも、クエリを文字列ではなくオブジェクトとして表すことが理にかなっています。すべてに文字列を使用するのではなく、クエリに適切なオブジェクト モデルを構築すると、すべてに文字列を使用する代わりに会計システムに適切なオブジェクト モデルを構築するのとほぼ同じ利点が得られます。

もう 1 つの大きな利点は、ARelがクエリ演算子の実際の代数を実装していることです。言い換えれば、ARel は、クエリを構築および構成するための数学的規則を知っています。それぞれが有効な SQL クエリを含む 2 つの文字列を連結すると、結果はおそらく有効な SQL クエリにはなりません。または、さらに悪いことに、それ有効な SQL クエリですが、意味をなさないもの、またはあなたが思っていることとはまったく異なることをするものです。これはARel では決して起こりません。(これは、私が以下にリンクしている記事が「構成の下で閉じられている」という意味です。)

オブジェクト/クエリの作成が「より簡単」になりますか?

はい。たとえば、前述したように、単純な部分からより複雑なクエリを作成する方がはるかに簡単です。

より効率的な SQL クエリにつながるでしょうか?

はい。ARel がクエリに対して適切なオブジェクト モデルを持っているという事実は、実際の SQL クエリを生成するずっと前に、ARel がそれらのクエリに対して最適化を実行できることを意味します。

すべての主要な DB と互換性がありますか? -そうなると思います。

はい。実際、上記では常に SQL について説明しましたが、実際には、リレーショナル クエリ代数はほとんどすべてのクエリを生成できます。ここでも、例として LINQ または Ambition を参照してください。どちらも、SQL、LDAP、ActiveResource、CouchDB、Amazon、Google などをすべて同じ構文でクエリできます。

おそらく、ARel とは何か、Nick Kallen が書いた理由についての最良の議論は、適切な名前の記事Why Arel? です。ニック・カレン自身による。注: この記事には数学とコンピューター サイエンスの専門用語が多少含まれていますが、まさにそれがポイントです。ARel には数学とコンピューター サイエンスの強力な基盤があり、それらの基盤が強力な特性を提供しています。

于 2010-05-05T04:35:20.483 に答える
19

ARel は、残念ながら SQL の生成に直接結び付けられているため、DataMapper のニーズには適していません。

ARel は、RDBMS の SQL クエリを生成および最適化する ActiveRecord の明示的なクエリ モデルです。

一方、DataMapper はデータ用の真のマッパーであり、非リレーショナル データ ストアとのインターフェイスを既に備えています。将来、DataMapper には Veritas と呼ばれる別のライブラリが含まれる可能性があります。これは、RDBMS だけでなく、あらゆるデータ ストアから供給されるデータにリレーショナル機能を提供することを目的としています。

于 2010-05-06T08:26:20.427 に答える
1

Rails 3 の Arel は、必要になるまでデータベースが照会されない関係オブジェクトを作成します。はるかに効率的です。

また、(慣れれば)より自然になることも、Rails の大きな強みです。

于 2010-07-23T04:10:55.093 に答える
0

実際、ActiveRelation に関するビデオ シリーズを開始しました。

最初の一般的なチュートリアルは、http://Innovative-Studios.com/#pilotで見ることができます。

于 2010-05-08T17:07:11.237 に答える