mysql/mariadb(또는 amazon orora)에서의 멀티 테넌트(Multi-tenant) 접근방식의 실용적인 구현
공유 스키마와 개별 스키마(또는 mysql의 데이터베이스)를 사용하는 경우의 장단점을 충분히 이해하고 있습니다.공유 스키마를 사용하기 위해 선택한 것을 보면,
멀티 테넌시(Multi-tenancy)를 보다 쉽게 실현할 수 있는 방법을 찾고 있습니다.각 테이블에 키를 추가할 수는 있지만, 모든 쿼리에서 멀티 테넌시를 사용하는 모든 단일 테이블에 대해 "여기서 tenant_id = X"를 추가해야 합니다.고통스럽게 들리네요.
쿼리 내의 모든 테이블 또는 접속 내의 모든 쿼리에 영향을 주는 파라미터를 설정하는 것이 훨씬 좋습니다.이렇게 하면 기존 쿼리를 모두 업데이트하지 않아도 되며 이후 쿼리에 테넌트 ID 검사를 포함할 필요가 없습니다.
처음에는 (아래에) 몇 가지 생각이 있었지만, 모두 꽤 괴로운 것 같습니다.
테넌트 ID별로 자동으로 필터링되는 각 테이블에 대해 임시 보기를 생성하시겠습니까(임시 테이블을 사용할 수도 있음)?
테넌트 ID로 필터링하고 쿼리에서 테이블 이름을 동적으로 설정하는 보기 생성
테넌트 ID별로 파티션을 사용하고 개별 파티션을 쿼리합니다.
더 좋은 생각 있어요?
제안하고 있는 공유 스키마 모델의 문제 중 하나는 클라이언트입니다.과거에 여러 회사와 일했는데, 고객 계약에 따라 데이터는 다른 클라이언트 데이터와 혼재하지 않고 자급자족할 수 있도록 규정되어 있었습니다.그 때문에, 클라이언트 루트 마다 다른 스키마를 사용할 필요가 있었습니다.
또, 이것은 보다 유연한 솔루션이라고 생각할 수 있습니다.클라이언트가 매우 커지면, 자신의 서버/인스턴스로 이행해, ProxySQL등의 유틸리티를 사용하고, 스키마명에 근거해 트래픽을 관련의 서버/인스턴스로 전송 할 수 있습니다.
모든 클라이언트 간에 공유되는 데이터가 있는 경우 해당 데이터를 자체 '프라이머리' 서버에 저장하여 클라이언트 서버로 복제합니다.그런 다음 읽기를 확장해야 하는 경우 클라이언트 서버에서 복제본을 체인으로 연결하여 추가로 복제할 수 있습니다.
어떤 결정을 내리더라도 클라이언트 데이터를 단일 스키마로 결합할 경우 법적 영향을 주의할 것입니다. 데이터를 결합할 수 있는 권한이 있는지 확인하십시오.소셜 네트워크와 같은 것을 구축하고 있는 경우는, 데이터를 조합할 필요가 있습니다만, 이것은 당연한 일입니다.
언급URL : https://stackoverflow.com/questions/55405797/practical-implementation-of-multi-tenant-approach-in-mysql-mariadb-or-amazon
'source' 카테고리의 다른 글
Python 클래스를 동적으로 로드하는 방법 (0) | 2022.10.20 |
---|---|
팬더 인덱스 컬럼 제목 또는 이름 (0) | 2022.10.20 |
Class 파일의 바이트 코드를 볼 수 있나요? (0) | 2022.10.20 |
Rails 5 커스텀 데이터베이스 타입GIS + Maria의 경우DB (0) | 2022.10.20 |
MySQL의 두 시간 필드와의 차이(분) (0) | 2022.10.20 |