2008-10-07 5 views
8

저는 Ruby on Rails를 사용하여 지금까지 한계에 부딪혔을 때 그것을 포기해야만했던 사람들, 또는 궁극적으로 너무 엄격하다는 것을 알게되었습니다. 나는 세부 사항을 잊어 버렸지 만 하나 이상의 데이터베이스를 사용해야 만했을 것입니다.레일에 루비의 한계는 무엇입니까?

그래서 Ruby on Rails 밖의 기능/요구 사항이 무엇인지, 아니면 적어도 일부는 잃어 버릴지라도 더 유연한 프레임 워크를 사용하는 것이 더 바람직하다는 그러한 왜곡이 필요한지 알고 싶습니다. 우아함을 유지하거나 추가 상용구 코드를 작성하십시오.

+0

나에게 주관적인 소리. –

답변

12

레일즈 (루비 자체가 아닙니다)는 "의견이있는 소프트웨어"가 된 것을 자랑스럽게 생각합니다.

실제로 레일의 저자는 특정 대상을 염두에두고 (기본적으로) 레일을 목표로하고 있다는 것을 의미합니다. 해당 대상 사용자에게 X 기능이 필요하지 않으면 추가되지 않습니다. 데이터베이스의

  1. 외부 키 여러 DB 년대에
  2. 연결 SOAP 웹 서비스
  3. 한 번에 : 사람들이 관심을 수 있다는 것을 지원하지 않습니다 명시 적으로 레일 내 머리 위로 떨어져

    , 일 (레일 2 이후.0) 여러 데이터베이스에
  4. 연결 서버 한 번에, 플러그인과 레일을 확장하는 것은 매우 쉽고, 많은이 레일 위의 모든 기능을 추가 플러그인, 그리고 말했다

더 많이, 그래서 나는 이것을 한계로 간주하지 않을 것입니다.

다른주의 사항은 MVC를 사용하여 CRUD 웹 응용 프로그램을 만드는 아이디어를 바탕으로 레일이 인 것을이라고합니다. CRUD 웹 응용 프로그램이 아닌 (실제로 메시징 시스템 인 트위터와 같은) 또는 ASP.NET 웹폼과 같은 모델을 사용하고 싶다는 미친 경우 문제가 발생할 수 있습니다. 이 경우 레일을 사용하지 않는 것이 좋습니다. 자전거 부품으로 배를 만들려고하는 것입니다.

당신이 실행하게 될 문제는 빠른 플러그인으로 해결할 수 없으며 코딩의 하루 또는 2 번은 기본 루비 런타임 (메모리 누출, 녹색 스레드, 쓰레기)에 내재 된 모든 문제입니다. 성능 등).

+0

우리가 선택할 수있는 Ruby 런타임이 두 개 이상인 점을 감안할 때 이러한 문제 중 일부라도 문제가되고 있습니다. –

+4

Rails는 요즘에는 DB/여러 DB 서버에 대한 연결을 즉시 지원합니다. (모델 별 또는 요청별로, 전화 당). 지금 당장 사용하고 있습니다. localhost에서 실행되는 하나의 postgres와 BigFreakingOracleBox에서 실행되는 하나의 Oracle DB가 있습니다. 문제는 없습니다. –

+1

외부 키가 지원되지 않습니까?/나 캘린더를 본다 ...이 사람들은 10 년 동안 그들이 있다고 생각 하나? –

5

Ruby on Rails는 데이터베이스 기반 애플리케이션이 즉각적인 일관성을 보장해야하고 둘 이상의 데이터베이스 스키마를 사용해야하는 경우 필요할 수도있는 2 단계 커밋을 기본적으로 지원하지 않습니다.

많은 웹 응용 프로그램에서 일반적인 유스 케이스는 아닙니다. 둘 이상의 데이터베이스를 사용하여 최종 일관성을 완벽하게 지원할 수 있습니다. 또는 하나의 데이터베이스 스키마로 즉각적인 일관성을 지원할 수도 있습니다. 전자의 경우는 응용 프로그램이 많은 양의 트랜잭션을 지원해야하는 경우 큰 문제입니다 (기술 용어 참고). 후자의 경우가 더 일반적이며, 레일스는 정상적으로 처리됩니다.

솔직히 말해서 실제 확장 성 문제가 발생할 때까지는 Ruby on Rails (또는 모든 프레임 워크) 사용에 대한 제한은 없습니다. 킬러을 먼저 작성하고, 그런 다음 확장성에 대해 걱정하십시오.

CLARIFICATION : 아키텍처에 근본적인 변화가 필요할 수 있기 때문에 Rails가 어려움을 겪을 것이라고 생각합니다. 나는 관대하고 외래 키 시행이나 SOAP 서비스와 같은 보석/플러그인 생태계의 일부인 몇 가지를 포함 할 것이다.

2 단계 커밋은 하나의 트랜잭션 컨텍스트 내에서 물리적으로 별개의 서버에 대해 두 가지 커밋을 시도하는 것을 의미합니다.

2 단계 커밋의 경우 # 1을 사용하십시오. 데이터베이스가 두 개 이상 있고 두 서버에 스키마가 분산되도록 데이터베이스를 클러스터했습니다. ActiveRecord가 다른 서버를 가로 지르는 "외부 키 맵"을 수행하도록 허용하기 때문에 두 서버 모두에 커밋 할 수 있습니다.

2 단계 커밋의 경우 # 2를 사용하십시오. 메시징 솔루션을 구현하려고합니다 (미안하지만, 저는 하루에 J2EE 개발자입니다). 메시지 생성자는 메시징 중개자 (한 서버)와 데이터베이스 (다른 서버)에 커밋합니다.

+0

기술적으로 사실이지만, db 미들웨어를 사용하여 2 단계 커밋을 수행하거나 자체적으로 지원하는 db를 사용할 수 있다고 생각합니다. 나는 그것이 프레임 워크의 우선 순위가 아니라 아마 제한이라고 부를 수 있을지 확신하지 못한다. –

+0

이 예제에서 2 단계 커밋이란 정확히 무엇을 의미합니까? –

0

오리온의 답변이 맞습니다. AR/Rails에는 몇 가지 어려운 제한 사항이 있습니다. Windows에 배포, 자주 사용되지 않는 AR 커넥터 (예 : 파이어 버드 (Firebird)), 그러나 그가 언급 한 것조차도 여러 데이터베이스와 DB 서버에는 레거시, 샤딩 (sharding) 및 기타 이유로 문제를 해결하는 보석과 플러그인이 있습니다.

진짜 제한은 레일 개발자들이 작업하고있는 모든 것들을 계속 유지하고 특정 문제를 조사하고, 얼마나 많은 블로그가 있고, 얼마나 많은 메일 링리스트 볼륨이 있는지를 감안할 때 얼마나 많은 시간이 걸리는지입니다.

1

limits of ActiveRecord에 대한 좋은 토론을 발견했습니다. 내가 대답 즉 수 있습니다 여기에 더 큰 "메타 질문에"있다고 생각

1

는 "때 개발 시간을 단축하기 위해 외부 라이브러리에 의지하는 것이 OK인가?"

타사 라이브러리는 종종 위대한과 개발 시간을 크게 줄일 수 있지만, 큰 문제가있다, Joel Spolsky는 이것을 "누출 추상화의 법칙"이라고 부른다. 만약 당신이 구글에서 그것을 본다면 그의 포스트가 먼저 나올 것이다. 본질적으로 이것은 개발 시간의 트레이드 오프가 당신이 커버하에 무슨 일이 벌어지고 있는지 전혀 모른다는 것을 의미합니다. 그래서 무언가가 부서지면 완전히 멈추고 매우 제한된 디버깅 방법을가집니다. 이것은 또한 RAILS에서 단순히 지원되지 않는 기능 중 하나를 선택했다면, 실제로 필요하다는 것을 의미합니다. 운이 좋다면 직접 기능을 쓰는 것 외에는 다음 단계가 없습니다. 많은 도서관이이를 어렵게 만들 수 있습니다.

우리는이 문제로 개발구에 심하게 불타 버렸습니다. 우리의 솔루션은 일반로드에서는 정상적으로 작동했지만 우리 사이트가 많은 수의 동시 사용자를 확보하기 시작했을 때 우리가 사용했던 써드 파티 가입 라이브러리가 우리가 경험 한로드 유형에 견딜 수 없음을 발견했습니다. 이것은 우리를 매우 어려운 곳으로 만든다. 근본적으로 우리는 전체 구독 서비스를 스스로 성능을 염두에두고 다시 작성해야합니다. 이렇게하는 것은 우리가 도서관을 사용하는 데 시간을 낭비했다는 것을 의미합니다.

타사 라이브러리는 중소 규모 응용 프로그램에 적합 할 수 있습니다. 개발 시간을 획기적으로 줄이고 개발 초기 단계에서 처리 할 필요가없는 복잡성을 숨길 수 있습니다. 그러나 결국 그들은 당신을 따라 잡을 것이고 당신은 "누출 법의 법칙"을 벗어나기 위해 당신의 솔루션을 재 작성하거나 다시 엔지니어링해야 할 것입니다.

+0

... 그 선재 라이브러리를 사용한 경험이 실제로 작성해야 할 것을 가르치는 데 도움이되는 것을 제외하고는 물론입니다. 그래서, 그것은 총 손실이 아닙니다. 솔직히 말해서 나는 _ultimate_의 성능을 염두에두고 모든 것을 쓰고 하드웨어가 항상 따라 잡을 것이라고 말하는 바보들에게 웃으며 ... –

1

루비는 ASP에서 IsPostBack과 같은 기능을 가지고 있지 않습니다.인터넷

관련 문제