2010-03-09 8 views
3

Ruby on Rails로 응용 프로그램을 만들려고하는데 여러 데이터베이스를 사용하고 싶습니다. 기본적으로 각 사용자마다 여러 회사가있는 회계 응용 프로그램입니다. 나는이 게시물 http://programmerassist.com/article/302 을 발견하지만이 문제에 대한 자세한 의견을 읽고 싶습니다 각 회사여러 데이터베이스를 사용해야합니까?

에 대한 데이터베이스를 생성하고 싶습니다. MySQL과 PosgreSQL 중 어느 데이터베이스를 선택해야합니까?

답변

6

멀티 테넌트 앱을 처리하는 데는 여러 가지 옵션이 있습니다.

먼저 차트에 범위를 추가 할 수 있습니다 (Chad Birch가 제안한 것처럼 company_id 사용). 대부분의 유스 케이스에서 이것은 괜찮습니다. 보안 정보/개인 정보 (예 : 회계 정보)를 처리하는 경우 데이터를 비공개로 유지하기 위해 테스트에 매우주의해야합니다.

여러 데이터베이스를 사용하여 시스템을 실행할 수 있습니다. 각 클라이언트에 대해 데이터베이스를 사용하는 단일 앱을 보유하거나 실제로 각 클라이언트에 대해 별도의 앱을 보유 할 수 있습니다. 각 클라이언트에 대한 데이터베이스를 실행하면 레일에있는 그레인에 대해 약간의 문제는 없지만 수행 할 수 있습니다. 보유한 클라이언트의 수와 기대치에 따라 개별 앱을 실행하는 것이 좋습니다. 배포 설정 (카피 스트라 노, 요리사, 인형 등)에 대한 일부 작업을 통해이 과정을 매우 간소화 할 수 있습니다. 각 클라이언트는 완전히 고유 한 환경에서 실행되며, 특정 클라이언트의로드가 크면 자체 서버로 스핀 할 수 있습니다.

PostgreSQL을 사용하는 경우 스키마를 사용하여 비슷한 작업을 수행 할 수 있습니다. PostgresQL schemas은 다른 클라이언트의 데이터를 islolating하는 매우 편리한 방법을 제공합니다. 데이터베이스는 하나 이상의 명명 된 스키마를 포함하며, 차례로 테이블을 포함합니다. 마이그레이션과 배포에 약간의 지능을 추가해야하지만 실제로 잘 작동합니다.

Rails 애플리케이션에서 현재 사용자의 스키마를 켜거나 끄는 요청에 필터를 첨부합니다. 같은

뭔가 : 그들은 여러 데이터베이스와 필요성이나 경험이없는 사람에서 올 때 여러 데이터베이스에 대한 답변

before_filter :set_app 

def set_app 
    current_app = App.find_by_subdomain(...) 
    schema = current_app.schema 

    set_schema_path(schema) 
end 


def set_schema_path(schema) 
    connection = ActiveRecord::Base.connection 
    connection.execute("SET search_path TO #{schema}, #{connection.schema_search_path}") 
end 

def reset_schema_path 
    connection = ActiveRecord::Base.connection 
    connection.execute("SET search_path TO #{connection.schema_search_path}") 
end 
-1

아니요, 여러 데이터베이스를 사용하지 않아야합니다.

나는 당신에게 어떤 조언을 드릴 것인지는 잘 모르겠다. 데이터베이스 디자인에 대한 아주 기본적인 오해가있는 것처럼 보이기 때문에, 먼저 데이터베이스의 기초를 배우고 싶다.

"회사 ID"유형 열을 테이블에 추가하여 특정 레코드가 속한 회사를 식별하는 것이 가장 좋습니다.

+0

왜 여러 데이터베이스를 사용하는 것이 좋지 않습니까? –

+0

데이터 무결성과 보안을 제공하는 것은 매우 일반적인 전략입니다. –

+0

@ 차드 (Chad) : 누군가 특정하지 않고 자신을 교육하도록 누군가에게 말하면, 매우 까다 롭지는 않습니다. 적어도 링크가 도움이 될 것입니다. 그런데, 마지막 단락은 질문의 세부 사항이 부족하다는 점을 감안할 때 합리적인 것처럼 보입니다. 그러나 전반적으로 이것은 꽤 도움이되지 않는 대답입니다. – aaaidan

1

문제입니다. 두 번째 문제는 일부 데이터베이스는 사용자가 자체 백업 및 복구를 수행 할 수 있도록 허용하고 일부 사용자가 다른 데이터 서버를 가리 키도록 확장하는 것을 포함하여 여러 데이터베이스 간 전환을 허용하지 않는다는 것입니다. 다음은 유용한 비디오 링크입니다. http://aac2009.confreaks.com/06-feb-2009-14-30-writing-multi-tenant-applications-in-rails-guy-naor.html

이 링크는 Ruby on Rails with Postgresql을 지원합니다.

저는 현재 다중 거주자, 다중 데이터베이스, 다중 사용자 (서로 다른 액세스 수준의 동일한 임차인에 대한 많은 로그온) 및 온라인 SaaS 응용 프로그램을 보유하고 있습니다.실제로 두 가지 응용 프로그램이 회계 범주에 있고 다른 응용 프로그램은 은행업입니다. 두 앱 모두 동일한 구조와 방법으로 제작됩니다. 클라이언트 사용자 (세입자)는 해당 사용자의 로그온하에 데이터베이스를 전환 할 수 있습니다. 세무사와 같은 상담원 사용자는 고객 전용 데이터베이스간에 전환 할 수 있습니다. 수퍼 유저는 모든 데이터베이스로 전환 할 수 있습니다. 하나의 데이터 딕셔너리, 즉 테이블과 칼럼이 정의 된 곳은 단 하나입니다. 전역 데이터 및 로컬 데이터가 있습니다. 모든 사용자가 사용할 수있는 마스터 차트 차트와 같은 글로벌 데이터 (읽기 전용). 로컬 데이터는 사용자의 데이터베이스입니다. 새로운 사용자는 마스터 데이터베이스의 복제본을 얻을 수 있습니다. 선택할 수있는 복제본이 여러 개 있습니다. 수퍼 유저는 복제 데이터베이스를 유지 보수 할 수 있습니다.

문제는 그것이 COBOL에 있고 ISAM 파일을 사용하고 CGI 방법을 사용한다는 것입니다. 이 문제는 a) COBOL이 오래되었다는 인식이있다. b) 훈련받은 사람들을 얻고있다. c) 가격을 책정하고 d) 온라인 도움을 받는다. 그렇지 않으면 작동하고 나는 그것에 만족합니다.

그래서 대체 할 대상과 지뢰밭을 연구하고 있습니다.

0

과거에는 시간이 있었지만이 경우에는 PostgreSQL 스키마를 사용하여 다중 점유 응용 프로그램을 만들었습니다. 관련 데이터가 저장되는 common이라는 스키마가 있습니다.

# app/models/organisation.rb 
class Organisation < ActiveRecord::Base 
    self.table_name = 'common.organisations' 
    # set relationships as usual 
end 

# app/models/user.rb  
class User < ActiveRecord::Base 
    self.table_name = 'common.users' 
    # set relationships as usual 
end 

다음 마이그레이션을 위해이 훌륭한 자습서를 사용했습니다. http://timnew.github.com/blog/2012/07/17/use-postgres-multiple-schema-database-in-rails/ 이것을 사용하면 Ryan Bates가 철도에서했던 것처럼 다른 장소에서 본 것보다 훨씬 좋습니다.

새 조직이 만들어지면 조직의 하위 도메인 이름이있는 새 스키마가 만들어집니다. 나는 과거에 다른 스키마를 사용하는 것은 좋지 않다고 생각했지만, 당신이하고있는 직업에 달려있다.이 앱은 거의 사회 구성 요소가 없으므로 적합하다.

관련 문제