복붙노트

[SQL] 어떻게 공유 테이블 구조와 멀티 테넌트 (multi-tenant) 데이터베이스를 만드는 방법?

SQL

어떻게 공유 테이블 구조와 멀티 테넌트 (multi-tenant) 데이터베이스를 만드는 방법?

우리의 소프트웨어는 현재 MySQL을 실행합니다. 모든 임차인의 데이터는 동일한 스키마에 저장됩니다. 우리는 루비 온 레일즈를 사용하고 있기 때문에 우리가 쉽게하는 세입자에 속한 데이터를 확인할 수 있습니다. 그러나 우리는 다른 솔루션을 평가하고, 그래서 자신의 데이터가 손상 될 수 있다는 우려 물론 일부 기업이있다.

지금까지 나는 세 가지 옵션을 보았다 :

다중 스키마는 내가 가장 좋아하는 (고려 비용)입니다. 그러나 새로운 계정을 생성하고 마이그레이션을하는 것은 내가 모든 스키마를 반복하고 자신의 테이블 / 열 / 정의를 변경해야하기 때문에, 매우 고통스러운 것 같다.

질문 : 다중 스키마는 각 세입자에 대한 약간 다른 테이블을 설계 할 것 -이 원하지 않는다. 나 테이블 구조는 모든 세입자간에 공유되는 다중 스키마 멀티 테넌트 (multi-tenant) 솔루션을 사용할 수있는 RDBMS가 있습니까?

추신 울트라 멀티 (10.000+ 세입자)과 같은 멀티 I 평균 뭔가에 의해.

해결법

  1. ==============================

    1.고객이 때로는 단지 물리적 분리가 충분한 보안을 제공 할 수있는 오해 고통으로 이것은 불행한 일이다.

    고객이 때로는 단지 물리적 분리가 충분한 보안을 제공 할 수있는 오해 고통으로 이것은 불행한 일이다.

    당신이 확인 할 수 있습니다 멀티 테넌트 데이터 아키텍처라는 제목의 흥미로운 MSDN 문서는있다. 저자가 공유 접근을 향해 오해를 해결하는 방법입니다 :

    기술 및 비즈니스 고려 사항에 관해서는, 기사는 어떤 접근 방식이 다른 것보다 더 적합 할 수있는 위치에 대한 간략한 분석을합니다 :

    업데이트 : 또한 세입자의 예상 수에 대해 업데이트합니다.

    모든 시나리오하지 않을 경우 임차인의 예상 수 (10,000)는 대부분, 다중 데이터베이스 접근 방식을 제외해야합니다. 난 당신이 10,000 데이터베이스 인스턴스를 유지하고 매일 새로운 수백을 만들 필요의 아이디어를 공상하는 것입니다 생각하지 않습니다.

    공유 데이터베이스가 단일 스키마 접근 방식이 가장 적합처럼 혼자 매개 변수에서, 그것은 보인다. 당신이 세입자 당 50MB의 단지 저장있을거야, 어떤 당 세입자 추가 기능이있을 것이라는 사실은이 방법이 더 적합합니다.

    MSDN 문서는 위에서 언급 한 공유 데이터베이스 접근에 대한 보안 고려 사항을 해결 세 가지 보안 패턴을 언급한다 :

    당신이 당신의 응용 프로그램의 데이터 안전 조치 확신 할 때, 당신은 당신의 고객 강력한 데이터 안전 보장을 제공하는 서비스 수준 Agrement을 제공 할 수있을 것입니다. 당신의 SLA에서 떨어져 보장에서, 당신은 또한 당신이 손상되지 않도록 데이터를 확인하기 위해 복용 할 것이라는 대책을 서술 할 수있다.

    업데이트 2 : 분명히 마이크로 소프트들 / 이동이 주제에 관한 새로운 기사를 만들어, 원래 링크가 사라이며,이 새로운 하나입니다 멀티 테넌트 SaaS는 데이터베이스 임대 패턴 (샤이 Kerer로 명성)

  2. ==============================

    2.(SQL 서버이기는하지만) 내 경험은 다중 데이터베이스가 각 클라이언트가 자신의 데이터베이스가 어디 길을 가야하는 것입니다. 내가 더 MySQL의 또는 루비 레일 경험이없는 그래서 있지만, 내 입력이 어떤 값을 추가 할 수 있습니다 바라고 있어요.

    (SQL 서버이기는하지만) 내 경험은 다중 데이터베이스가 각 클라이언트가 자신의 데이터베이스가 어디 길을 가야하는 것입니다. 내가 더 MySQL의 또는 루비 레일 경험이없는 그래서 있지만, 내 입력이 어떤 값을 추가 할 수 있습니다 바라고 있어요.

    그 이유는 이유는 다음과 같습니다 :

    나는이 몇 가지 유용한 정보를 제공 않습니다 바랍니다! 이 많은 이유가 있지만 내 마음이 비어 갔다. 그것은 다시 맞이할 경우에, 나는 :) 업데이트거야

    편집하다: 나는이 대답을 게시 때문에, 우리는 10,000 세입자를 얘기하는 것이 이제 분명하다. 내 경험은 대규모 수백 개의 데이터베이스에 - 나는 만 별도의 데이터베이스 내가 지금 당신의 시나리오에 대한 다중 DB 접근 방식을 선호하고 있지 않다, 그래서 당신의 시나리오도 관리 할 수 ​​있다고 생각하지 않습니다. 지금 분명 특히 각 테넌트 작은 데이터 볼륨을 얘기!

    어쨌든 여기에 내 대답을 유지하는 것은 그것 (이하 세입자와) 유사한 보트에 다른 사람에 대한 몇 가지 사용을 할 수 있습니다로

  3. ==============================

    3.다음은 그들이 멀티 테넌시 (multi-tenancy)를 구현하는 방법에 대한 Salesforce.com에 흰색 종이에 대한 링크는 다음과 같습니다

    다음은 그들이 멀티 테넌시 (multi-tenancy)를 구현하는 방법에 대한 Salesforce.com에 흰색 종이에 대한 링크는 다음과 같습니다

    http://www.developerforce.com/media/ForcedotcomBookLibrary/Force.com_Multitenancy_WP_101508.pdf

    그들은 / 500 문자열 열 (Value0, 값 1, ... Value500) w 1 개 거대한 테이블이 있습니다. 날짜 및 숫자의은 데이터베이스 수준에서 그 나라의 종류로 변환 될 수있는 형식의 문자열로 저장됩니다. 세입자 당 고유 할 수있는 데이터 모델의 형태를 정의하는 메타 데이터 테이블이 있습니다. 등의 인덱싱을위한 추가 테이블, 관계, 고유 값이 있습니다

    왜 번거 로움?

    각 세입자는 데이터베이스 레벨 (등 ALTER 테이블)에서 변경하지 않고도 실행 시간에 자신의 데이터 스키마를 사용자 정의 할 수 있습니다. 이것은 확실히 같은 것을 할 수있는 어려운 방법이지만 매우 유연합니다.

  4. ==============================

    4.당신은 세입자 당 하나의 데이터베이스는 옵션이며 일부 대형 트레이드 오프가 않습니다 언급한다. 여기에는 하나의 숫자 나 세입자의 낮은 10 개의 같은 작은 규모에서 잘 작동 할 수 있지만, 그 이상은 관리하기가 어려워진다. 바로 마이그레이션뿐만 아니라 단지 데이터베이스를 유지하고 실행에 모두.

    당신은 세입자 당 하나의 데이터베이스는 옵션이며 일부 대형 트레이드 오프가 않습니다 언급한다. 여기에는 하나의 숫자 나 세입자의 낮은 10 개의 같은 작은 규모에서 잘 작동 할 수 있지만, 그 이상은 관리하기가 어려워진다. 바로 마이그레이션뿐만 아니라 단지 데이터베이스를 유지하고 실행에 모두.

    여전히 세입자에 걸쳐 마이그레이션을 실행하는 것이 어려워진다 1000에서 스키마의 포스트 그레스의의이 문제를 가지고 시작할 수 있지만 스키마에 따라 모델뿐만 아니라, 각각에 대해 고유 한 스키마에 유용합니다.

    더 확장 성이 방법은 절대적이지만 다른 논리 파편 (또는 테이블)에 걸쳐, 동일한 데이터베이스에 저장 무작위로 분산 세입자를 가지고있다. 당신의 언어에 따라이 작업에 도움을 줄 수 있습니다 도서관은 여러 가지가있을 수 있습니다. 당신이 레일을 사용하는 경우 임대차 acts_as_tenant을 enfore하는 라이브러리가있다, 그것은 당신의 세입자 쿼리 데이터 만 있음을 다시 끌어 보장합니다. 보석 아파트도 있습니다 - 그것은 스키마 모델을 사용하지만이 모든 스키마에 걸쳐 마이그레이션에 대한 지원을한다. 당신이 장고를 사용하는 경우가 다수이다하지만 더 인기있는 것들 중 하나는 스키마를 통해 것 같다. 응용 프로그램 수준에서 이러한 도움말 이상의 모든. 직접 데이터베이스 수준에서 더 뭔가를 찾고 있다면, Citus 더 밖으로 포스트 그레스와 함께 상자의 멀티 테넌시 (Multi-tenancy) 작업을 위해 샤딩의이 유형을 만들기에 초점을 맞추고 있습니다.

  5. from https://stackoverflow.com/questions/2213006/how-to-create-a-multi-tenant-database-with-shared-table-structures by cc-by-sa and MIT license