환경 : 제이 보스, MySQL은, JPA, 최대 절전 모드아카이빙 전략과 데이터의 한계
우리의 웹 응용 프로그램 (~ 1,000,000) 사용자의 많은 양의 음식됩니다와 자식 테이블 곳의 제비가있다 사용자 특정 데이터 (예 : 개인, 건강, 포럼 기고 등)가 저장됩니다.
- 아카이브 사용자 & 사용자 특정 정보에 대한 가장 좋은 방법이 될 것입니다 무엇. [a] 보관 된 사용자 & 사용자 별 정보를 동일한 데이터베이스 내의 해당 테이블 (예 : user_archive, user_forum_comments_archive ...)로 이동하는 것이 현명한 방법입니까 아니면 [b] 데이터베이스 항목을 원본 테이블 (들)은 단지 아카이브되지 않은 항목 만 쿼리합니다.
우리는 User.loginid에 고유 한 제한 사항이 있습니다. 사용자가 1 - [a]를 통해 아카이브 된 경우 (예 : loginid 'samuel'을 가진 사용자가 아카이브 테이블로 이동 한 경우, 새 사용자가 원본 테이블에 같은 이름으로 추가되면 어떻게 방지 할 수 있습니까? 고유 한 키 제약 조건을 해결하는 가장 좋은 전략은 무엇이 될까요? 필요한 경우 JPA 엔티티 모델에 의해 노출 된 지속성 API를 통해 데이터베이스 도구에 의존 할 것입니까?
우선, 아카이브 된 데이터에서 수행 할 수있는 작업은 무엇입니까? 포인트 2와 3을 제외하고, 예를 들어 포럼에 몇 개의 항목을 작성한 후 나중에 기여를 중지하고 "아카이브 된"이라고 가정 해 봅시다. 활동중인 사용자가 내 기여도를 볼 수 있습니까? 또는 아카이브도 가져올 수 있습니까? 그렇다면 누군가가 포럼을 통해 어떤 데이터에 액세스 할 수 있습니까 (공개 프로필이 계속 표시됩니까?). "다시 활동하는"사람들에게 어떤 정책이 있습니까? 활성 사용자 대 비활성 사용자의 비율은 어느 정도입니까? –
포럼이 아직 많은 게시물을 보유하고 있기 때문에 포럼 기여가 표시되어야한다고 생각합니다 (특정 사용자에 대한 포럼 주석의 보관으로 인해 대화가 완전히 쓸모 없게 될 수 있습니다).사용자의 공개 프로필을 보관중인 다른 사용자에게 표시 할 필요는 없습니다. 시스템에서 사용하지 않는 사용자를 시스템에 보관하는 것이 좋습니다 (시스템의 총 사용자 수의 10 %). 다시 말하면,이 문제에 대한 올바른 접근 방법에 대한 아이디어를 찾고있을 뿐이며, 테이블 크기를 가능한 작게 유지하여 활성 사용자가 쿼리를 더 빨리 수행 할 수 있도록하려는 것입니다. – Sam
당신이 1,000,000 명의 사용자를 확보 할 계획이라면 'samuel'과 같은 사용자 이름이 아닌 자동 생성/식별 숫자 PK를 사용하시기 바랍니다. 해당 문자열을 모든 곳으로 드래그하여 색인 성능을 저하시킵니다. –