Wil*_*ill 85 ruby activerecord ruby-on-rails arel
我知道它是ActiveRecord的替代品,它使用对象而不是查询.
但...
为什么这样更好?
对象/查询会"更容易"创建吗?
它会导致更高效的SQL查询吗?
它会与所有主要数据库兼容吗? - 我认为它会.
使用存储过程会更容易/更难吗?
Jör*_*tag 182
究竟什么是Rails 3.0中的Arel?
它是关系查询运算符的代数的对象模型.
我知道它是ActiveRecord的替代品
不,不是.它是字符串中手工制作SQL查询的替代品.它是一个常见的查询层,是 ActiveRecord的基础,但它也可以用作DataMapper的基础.
如果它是任何东西的替代品,它就是Ambition的替代品.或者,您可以将其视为LINQ标准查询运算符或Python的SQLAlchemy的Ruby版本.(事实上,作者明确引用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是什么以及Nick Kallen为什么写的最好的讨论是恰当命名的文章Why Arel?尼克卡伦本人.注意:这篇文章包含一些温和的数学和计算机科学术语,但这正是重点:ARel在数学和计算机科学方面有一些坚实的基础,那些基础是它赋予它强大的属性.
kno*_*ory 19
遗憾的是,ARel与生成SQL直接相关,因此不适合DataMapper的需求.
我想说的是,ARel是ActiveRecord的显式查询模型,它为RDBMS生成和优化SQL查询.
另一方面,DataMapper是一个真正的数据映射器,并且已经可以与非关系数据存储进行交互.将来,DataMapper可能包含一个名为Veritas的独立库,旨在为来自任何数据存储的数据提供关系功能,而不仅仅是RDBMS.
归档时间: |
|
查看次数: |
15720 次 |
最近记录: |