2014-02-20 3 views
5

현재 멀티 테넌트 앱으로 구독을 판매하는 webapp을 만드는 중입니다. 내가 쓰고있는 기술은 난간이다.임차인 데이터 공유를 통한 다중 임대

그러나 현재 앱을 사용하여 고립 된 세입자가되지는 않습니다.

각 세입자는 제품을 만들어 앱의 개인 인스턴스에 게시합니다. 각 세입자는 자신의 사용자 기반을 가지고 있습니다.

문제가되는 사양은 거주자가 다른 제품을 공유 할 수 있으므로 재판매 할 수 있다는 것입니다.

설명 :

FruitShop 사과 오렌지와 토마토를 판매하고있다.
VegetableShop는 무와 후추 종을 판매합니다.

토마토는 다른 상점과 공유합니다.

VegetableShop 공유 된 품목 목록에서 토마토를 가져 와서 인벤토리에 추가하기로 결정하십시오.

야채를 탐색하는 고객은 무, 후추 종 및 토마토를 볼 수 있습니다.

짐작할 수 있듯이 select products where tenant_id='vegetableshop_ID'은 작동하지 않습니다.

내가 tenant_id, product_id, price_id을 가지고도 시작 - 종료 날짜를 게시 할 tenant_to_product 테이블의 일종으로 많은 관계에 많은 일을 생각했다. 제품은 테넌트 ID가 누가 원래 소유자인지 알기 위해 tenant_creator_id로 대체되는 "절반 테넌트 테이블"입니다.

제게 그것은 자신의 produts만을 판매하는 상점의 경우에도 복잡한 쿼리를 의미하는 것은 부담 스럽습니다. 판매 된 제품을 얻는 것은 복잡 할 것 :

select tenant_to_products.* 
where tenant_to_products.tenant_ID='current tenant' 
AND (tenant_to_products.product match publication constraints) 

for each tenant_to_product do 
    # it will trigger a lot of DB call 
    Display tenant_to_product.product with tenant_to_product.price 

취소 공유 제품 것은 또한 원래 제품을 참조하는 모든 tenant_to_products을 수정 복잡한 업데이 트를 의미 할 것입니다.

이 제약 조건을 구현하는 것이 좋은지 잘 모르겠지만 무엇을 제안합니까? 나는 어리석은 짓을하려고 계획하고 있는가? 아니면 그렇게 나쁜 생각이 아닌가?

답변

3

이미 해결 된 것처럼 제품 메커니즘에 대한 더 복잡한 가입이 필요합니다. 당신이 옳은 길을 걷고있는 것처럼 들립니다. 가능한 한 많은 정보를 요약하십시오.

예를 들어 'tenant_to_product'테이블을 호출하지 말고 대신 'tenant_relationships'를 호출하고 제품 ID를이 테이블의 열로 사용하십시오.

그러면 세입자가 서비스를 원할 때 전체 테이블을 추가 할 필요없이이 'service Id'테이블에 열을 추가하기 만하면됩니다.

성능면에서 약간의 지연만으로 업데이트되는 임차인 관계가있는 읽기 전용 데이터베이스 서버를 가질 수 있습니다. Azure 또는 유사한 클라우드 서비스를 사용하면이 작업을 쉽게 시작할 수 있습니다. 그러나 사용자가 1 백만 명이 넘지 않는 한 그럴 필요는 없습니다.

내가 제안을 고려해야 :

  • 활성/비활성 (그들은 순간에 매우 결함이 같은 재배자가 그들과 함께 버그를 포함 멈출 때까지 야채 가게, 일시적 토마토 판매를 중단하는 것이 좋습니다)

  • 'productRemoved'서비스와 같은 알림을위한 서버 측 서비스. 이러한 서비스는 일괄 변경으로 사용자에게 더 빠른 피드백을 제공합니다.

  • 정보를 삭제하지 말고 'delete_date'및 'delete_user_id'또는 이와 유사한 열을 설정하십시오.

  • 제품, 테넌트, 관계 등에 대한 변경 사항의 전체 감사 내역이 테이블은 상당히 커질 것이므로이 테이블은 읽기를 피하고 업데이트가 비동기 적이므로 호출자가 테이블 업데이트를 기다리지 못하도록 차단되지 않도록하십시오. . 하지만 아마도 비즈니스 관점에서 볼 때 매우 유용 할 것입니다.

편집 :

당신이 이미 본적이 없다면이 관련 질문이 유용 할 수 있습니다 : 여러 클라이언트를 제공하고 있습니다로 How to create a multi-tenant database with shared table structures?

2

멀티 테넌시 (multi-tenancy)는 명백한 대답을 보이지 않는 당신의 체계.

그러나 대안으로, 리셀러의 서비스 계층을 고려해보십시오. 이는 통합을 제공하면서도 어느 정도 격리를 가능하게합니다. 리셀러 계정이 Amazon과 같은 제 3 자와 어떻게 작동하는지에 대한 영감을 얻습니다.

필자는 이것이 매우 추상적 인 추론이지만 데이터 계층보다 상위 계층에서의 통합을 고려할 때 이점이 있다는 것을 알고 있습니다.

데이터 계층 수준에서 멀티 테넌시를 엄격하게 적용한 경험을 통해 우리는 임차가 까다로운 개념이 될 정도까지 비즈니스 계층 (예 : 리셀러 아이디어 등)에서 때로는 임차를 조작해야한다는 것을 알게되었습니다. 따라서 초기에 대안을 고려하면 도움이 될 수 있습니다.

관련 문제