2014-02-08 3 views
1

사용자가 제한된 프런트 엔드 인터페이스를 사용하여 자체 Mysql 데이터베이스 테이블을 만들 수있는 응용 프로그램이 있습니다. 프론트 엔드는 보안, 이름 중복 등을 처리합니다.동적 테이블 생성

나는 비슷한 SO 답변을 많이 읽었지만 "동적 테이블을 만들지 말고 몇 가지 테이블을 만들고 그들과 관련이있는 외래 키. " 이것은 각 사용자가 실제로 다른 사용자의 테이블과 독립적 인 자신의 테이블을 만들고 있기 때문에 실제로는 옵션이 아닙니다. 사용자는 자신과 연결된 여러 테이블을 가질 수 있습니다.

그래서 여기에 내 질문이있다 : 만약 내가 많은 테이블을 가지고 있다면 (몇백 만), 모든 테이블을 하나의 데이터베이스에 집어 넣거나 각 사용자에 대한 데이터베이스를 만든 다음, 데이터베이스, 성능 및 유지 보수 측면에서? 나는 이것에 관해 친구에게 말했고 많은 테이블보다 많은 데이터베이스를 복제하고 확장하는 것이 더 쉽다고 언급했다.

또 다른 질문 : 기존의 ORM은 동적 데이터베이스/테이블 생성과 같은 작업을 수행 할 수 있습니까? 지금 당장 SQL을 곧바로 사용하고 있습니다 만, 대신 이미 빌드/테스트 된 라이브러리를 가지고 있으면 좋겠지 만, 일반적인 문제 유형이 있다는 것을 이해합니다.

+0

나는 이것을 말할 수 있습니다 -> * "또는 각 사용자에 대해 데이터베이스를 만듭니다"* - 아주 나쁜 생각입니다. 유지 보수 등을 생각하면 –

+0

끔찍한 성능으로 끝날 것입니다. mysql 질의 캐시는 테이블에 키잉된다. 백만 개의 테이블이 있고 그 중 일부가 "활성"인 경우 캐시를 계속 파기합니다. –

+0

Marc B, 그렇다면 각각 하나 또는 두 개의 테이블이있는 백만 개의 데이터베이스가 있어야할까요? 아직도 캐싱을 엉망으로 만들겠습니까? –

답변

1

myisam 스토리지 엔진을 사용하는 경우 기본 엔진의 성능도 조사해야합니다.

테스트하지 않고 db 디렉토리에 um 디렉토리를 사용합니다. 검색 할 200 만 개의 표 항목 대 1 백만 항목 (말)의 디렉토리입니다. 이것은 MySQL이 단순히 szstem 파일의 API를 사용하여 dbs/테이블에 액세스한다고 가정합니다.

myisam에서는 테이블/dbs 수 제한이 파일 시스템에만 달려 있습니다.

논리 관점 (응용 프로그램 유지 관리 용이) 및 네임 스페이스 관리에서 사용자 당 1 개의 dir을 선호합니다.