2009-10-10 3 views
1

같은 데이터베이스 테이블에 20 개 이상의 사이트가있을 계획입니다. cms_config cms_pages cms_users cms_modules동일한 MySQL 데이터베이스에 여러 사이트가 있습니다.

나는이 각 테이블은 CUSTOMER_ID 열이 있어야합니다, 그래서 쉽게 선택하고위한 그 행을 호출 할 수 있다고 생각되었습니다이 유사한 구조처럼

주어진 고객. 그러나 이것이 로딩 시간, 메모리 사용 및 그 모든 것들에 관해서 할 때 가장 좋은 방법일까요?

나는 쉽게 업데이트하고 수정할 수있는 설치를 원합니다. 그래서 동일한 구조의 별도의 데이터베이스를 실행하는 것이 좋지 않을까요?

답변

2

동일한 데이터베이스에 모든 것을 가지고있어 유지 관리를 담당하는 경우 업데이트, 유지 관리 및 백업을 수행하는 가장 쉬운 경로입니다.

각 데이터베이스를 분리하면 (더 많은 유지 보수 비용을 들여) 각 고객 데이터베이스 사용자가 다른 모든 고객 데이터에 액세스 할 수 있으므로 cms_pages를 읽고 쓸 수 있기 때문에 보안 및 개인 정보 보호가 강화됩니다. 비용. 데이터베이스를 분리하면 성능 확장이 쉬워지며, 기대를 능가하는 고객을 자신의 서버로 더 빨리 이동할 수 있습니다. 업데이트 및 백업은 자동화 될 수 있으므로 큰 문제는 아닙니다.

많은 데이터가있는 고객은 다중 열 사용으로 인해 줄일 수있는 경우에도 인덱스 스캔 시간이 전체 페이지 크기에 비례하므로 데이터가 적은 고객의 성능에 영향을 미칩니다. 색인).

고객별로 별도의 데이터베이스를 가지고 가격을 지불하는 것이 좋습니다. 너무 많은 트래픽이 발생하지 않는 소규모 사이트가 아니면 모든 사람들이 알지 못하거나 자신을 찾지 못할 것입니다. 자신의 데이터베이스 사용자 이름 :-).

+0

나는 본다. 빠른 답장을 보내 주셔서 감사합니다. 고객 당 별도의 데이터베이스를 사용하기로 결정했다면 데이터베이스 구조를 업데이트하는 것이 어떻습니까? 한 번에 모든 고객에게 특정 변경 사항을 적용하기 위해 "모든 데이터베이스에 적용"을 적용하는 현명한 방법이 있습니까? – rkj

+0

모든 기존 고객과 데이터베이스에 대해 자신 만의 '메타 데이터베이스'를 가질 수 있습니다. 해당 데이터베이스를 쿼리하고 모든 업데이트에 순차적으로 업데이트를 적용하는 스크립트를 작성하십시오. –

+0

나는 당신이 무슨 뜻인지 모르겠다. '메타 데이터베이스'를 어떻게 가질 수 있는지 설명해 주시겠습니까? 그리고 소위 메타 데이터베이스 란 정확히 무엇입니까? I 've been 구조를 가진 하나의 데이터베이스를 가질 수 있다고 말하면서이 데이터베이스를 편집 할 때마다 고객 데이터베이스의 데이터를 지우지 않고 다른 데이터베이스에도 적용됩니다. 미리 감사드립니다 :) – rkj

1

이것을 멀티 테넌트 아키텍처라고합니다. 이를 구현하는 몇 가지 방법이 있습니다. 적절한 데이터베이스 라이브러리를 개발하는 데 시간을 투자한다면 모든 쿼리에서 tenantId 조건을 주입하는 모든 쿼리를 다시 작성할 수 있습니다 (이상적으로). 이 방법을 사용하면 각 테넌트가 자신의 데이터에 액세스 할 수 있음을 알 수 있습니다 (모든 쿼리가 사용자가 작성한 db 디렉토리로 전달되는 한).

또 다른 문제는 적절한 데이터베이스 색인을 만드는 것입니다. customerId/tenantId 열 + 사용자가 조회하는 필드를 사용하여 여러 열 인덱스를 만들어야하는 경우가 많습니다.

관련 문제