2010-06-11 4 views
2

봉투 : 제이보스 (H2, MySQL은, 포스트 그레스), JPA, 3.3.x는 현재 우리의 기본 키가 위의 주석을 사용하여 만든 응용 프로그램 특정 종자 데이터 인구

  1. @Id 
    @GeneratedValue(strategy = IDENTITY) 
    private Integer key; 
    
    최대 절전 모드. 우리는 많은 사용자 (~ 백만 명의 사용자)를 지원하고 어떤 키를 사용해야 하는지를 예상합니다. 정수 또는 Long이어야하며 위 선언의 서명되지 않은 버전을 사용해야합니까?

  2. 설치시 몇 가지 시드 데이터로 채워야하는 j2ee 응용 프로그램이 있습니다. 구매시, 고객은 응용 프로그램 위에 자신의 데이터를 작성합니다. 우리는 향후 출시를 위해 데이터를 제공, 수정 또는 추가 할 수있는 충분한 공간이 있는지 확인하기 만하면됩니다. 이것을 지원하는 가장 좋은 방법은 무엇인가요? 특정 ID (예를 들어 1000)에서 모든 테이블 식별자를 시작했지만 기본 키 생성을 수정하여 테이블 또는 시퀀스 기반 생성기를 사용하도록 요구했으며 ~ 100 개의 테이블이 있습니다. 이것이 올바른 전략인지 확실하지 않습니다.

우리는 키의 부호있는 정수 방법을 사용하는 경우 모든 고객 별 데이터를 사용할 수 있도록 아래의 0 (예 - 제가 숫자)부터 다 같은 종자 데이터를 가지고 감각을 만들 것 0 이상 (예 : + 숫자)

답변

1

현재 위의 주석을 사용하여 기본 키가 생성됩니다. 우리는 많은 사용자 (~ 백만 명의 사용자)를 지원하고 어떤 키를 사용해야 하는지를 예상합니다. 이 정수 또는 길어야한다 또는 내가 자바 튜토리얼의 Primitive Data Types에서 서명되지 않은 위의 선언의 버전

을 사용해야합니다

int:int 데이터 유형 서명 32 비트입니다 2의 보수 정수. 최소값은 -2,147,483,648이고 최대 값은 2,147,483,647입니다 (포함). 정수 값의 경우, 다른 데이터를 선택하는 이유 (위와 같음)가 없으면이 데이터 유형이 일반적으로 기본 선택입니다. 이 데이터 유형은 프로그램에서 사용할 숫자에 대해 충분히 큰 데이터 유형이지만, 더 넓은 범위의 값이 필요한 경우에는 long을 대신 사용하십시오. 이

(...) : 안전 경우까지

우리는 단지 확인, 발송 수정하거나 향후 릴리스에 대한 데이터를 추가 할 수있는 충분한 공간이 있는지 확인 할 볼 수 있습니다. 이것을 지원하는 가장 좋은 메커니즘은 무엇일까

내가 언급 한 데이터베이스로 이것을 테스트 하겠지만 시드 데이터에 대해 음수 ID를 사용하는 것이 더 안전한 솔루션 (가능한 충돌 없음) 인 것 같습니다. 그것이 작동하지 않는다면 (나는 그렇게 생각한다) TABLE 전략이 가장 이식 가능한 솔루션이라고 생각한다.

+0

-ve 숫자는 제대로 작동하는 것 같습니다. 충돌에 대한 가능한 사례는 2,147,483,647에 도달 한 후 생성 된 ID 오버플로가 -2,147,483,648로 이동하고 0으로 계산되기 시작하는 방법입니다. – user339108

+0

@ user339108 : 음수 ID를 사용하면 충돌이 발생해서는 안되며, 이것이이 솔루션이 좋은 이유입니다. 다른 질문에 대해서는 제너레이터가 -2,147,483,648로 이동하지 않는다고 생각합니다 (하지만이를 확인해야합니다). 당신이 안전하고 싶다면 아마도 길게 사용하십시오. –

+0

크기 조정 요구 사항에 대해 잘 모르겠습니다. 가능하면 Long을 피하는 것이 좋습니다. – user339108

관련 문제