[ruby-on-rails] Rails 3.0에서 Arel은 정확히 무엇입니까?

ActiveRecord를 대체하고 쿼리 대신 개체를 사용한다는 것을 이해합니다.

그러나…

왜 이것이 더 낫습니까?

개체 / 쿼리를 “더 쉽게”만들 수 있습니까?

더 효율적인 SQL 쿼리로 이어질까요?

모든 주요 DB와 호환됩니까? -그럴 거라고 생각합니다.

저장 프로 시저와 함께 사용하는 것이 더 쉬울까요?



답변

Rails 3.0에서 Arel은 정확히 무엇입니까?

관계형 쿼리 연산자의 대수를위한 객체 모델입니다.

ActiveRecord를 대체한다는 것을 이해합니다.

아니, 그렇지 않습니다. 문자열로 직접 만든 SQL 쿼리를 대체합니다. ActiveRecord의 기반 이되는 공통 쿼리 레이어 이지만 예를 들어 DataMapper의 기반으로 사용할 수도 있습니다.

그것이 무엇이든 대체한다면 그것은 Ambition의 대체물입니다. 또는 LINQ 표준 쿼리 연산자의 Ruby 버전이나 Python의 SQLAlchemy라고 생각할 수 있습니다. (사실 저자는 LINQ와 SQLAlchemy를 영감으로 명시 적으로 인용합니다.)

또는 named_scopes를 대체하는 것으로 볼 수 있습니다 . 사실, ARel은 “모든 쿼리가” “라는 생각을 거의 실현했습니다 named_scope. 그리고 whaddayaknow : 둘 다 같은 사람이 썼습니다.

쿼리 대신 개체를 사용합니다.

아니요, 개체 쿼리 사용 합니다.

왜 이것이 더 낫습니까?

Ruby는 문자열 지향 언어가 아니라 객체 지향 언어입니다. 그 이유 만으로도 쿼리를 문자열 대신 객체로 표현하는 것이 좋습니다. 모든 것에 문자열을 사용하는 대신 쿼리에 적절한 개체 모델을 구축하면 모든 것에 문자열을 사용하는 대신 회계 시스템에 적합한 개체 모델을 구축하는 것과 거의 동일한 이점을 얻을 수 있습니다.

또 다른 큰 장점은 ARel 이 쿼리 연산자 의 실제 대수 를 구현한다는 것 입니다. 즉, ARel은 쿼리를 구성하고 작성하기위한 수학적 규칙을 알고 있습니다. 각각 유효한 SQL 쿼리를 포함하는 두 문자열을 연결하면 결과가 유효한 SQL 쿼리가 아닐 수 있습니다. 또는 더 나쁜, 그것은 이다 유효한 SQL 쿼리,하지만 이해가되지 않는 한, 또는 당신이 그것을가하는 생각에서 완전히 다른 무언가를. 이것은 ARel 에서는 결코 일어날 수 없습니다 . (아래에 링크 된 기사가 “작문 아래 닫힘”이라는 의미입니다.)

개체 / 쿼리를 “더 쉽게”만들 수 있습니까?

예. 예를 들어, 위에서 언급했듯이 더 간단한 부분에서 더 복잡한 쿼리를 구성하는 것이 훨씬 쉽습니다.

더 효율적인 SQL 쿼리로 이어질까요?

예. ARel이 쿼리에 대한 적절한 개체 모델을 가지고 있다는 사실은 실제 SQL 쿼리를 생성하기 훨씬 전에 해당 쿼리에 대해 최적화를 수행 할 수 있음을 의미합니다.

모든 주요 DB와 호환됩니까? -그럴 거라고 생각합니다.

예. 사실 저는 항상 위에서 SQL에 대해 이야기했지만 실제로 관계형 쿼리 대수는 거의 모든 것에 대한 쿼리를 생성 할 수 있습니다. 다시 한 번 LINQ 또는 Ambition을 예로 참조하십시오. 둘 다 동일한 구문으로 SQL, LDAP, ActiveResource, CouchDB, Amazon, Google 등을 쿼리 할 수 ​​있습니다.

ARel이 무엇이며 Nick Kallen이 쓴 이유에 대한 가장 좋은 토론은 적절한 이름의 기사 Why Arel? Nick Kallen이 직접 작성했습니다. 참고 :이 기사에는 약간의 수학적 및 컴퓨터 과학 전문 용어가 포함되어 있지만 그게 바로 요점입니다. ARel은 수학과 컴퓨터 과학에서 강력한 토대를 가지고 있으며 이러한 토대가 강력한 특성을 제공합니다.


답변

ARel은 안타깝게도 SQL 생성과 직접 연결되어 있으므로 DataMapper의 요구 사항에 적합하지 않습니다.

내가 말한 방식은 ARel이 RDBMS에 대한 SQL 쿼리를 생성하고 최적화하는 ActiveRecord에 대한 명시 적 쿼리 모델이라는 것입니다.

반면 DataMapper는 데이터에 대한 진정한 매퍼이며 이미 비 관계형 데이터 저장소와 인터페이스 할 수 있습니다. 앞으로 DataMapper는 Veritas라는 별도의 라이브러리를 포함 할 것입니다.이 라이브러리는 RDBMS뿐만 아니라 모든 데이터 저장소에서 가져온 데이터에 관계형 기능을 제공하기위한 것입니다.


답변

Rails 3의 Arel은 DB가 필요할 때까지 쿼리되지 않는 관계 객체를 만듭니다. 훨씬 더 효율적입니다.

또한 Rails의 큰 강점 인 더 자연 스럽습니다 (익숙해지면).


답변

사실 저는 ActiveRelation에 대한 비디오 시리즈를 시작했습니다.

첫 번째 일반 튜토리얼은 http://Innovative-Studios.com/#pilot 에서 볼 수 있습니다.


답변