2014-01-29 4 views
0

하나의 특정 종류 안에서만 고유 한 기본 키를 만들 수있는 방법이 있습니까? (여기에 올바른 질문을하고 있다고 가정합니다 .- 사과하지 않으면 사과합니다.) "IdentityType.APPLICATION" 옵션이지만 "응용 프로그램"은 "가장 작은"사용 가능한 옵션 인 것 같습니다!각 종류에 고유 한 IdGeneratorStrategy

@PersistenceCapable(identityType = IdentityType.APPLICATION) 
public class AuditTrail 
{ 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Long ID; 
    @Persistent 
    private Date createDate; 
    @Persistent 
    private Long AdminID; 
    public AuditTrail() 
    { 
    this.createDate = new Date(); 
    } 
    public AuditTrail(Long AdminID) 
    { 
    this(); 
    this.setAdminID(AdminID); 
    } 
} 

를하지만 새 항목을 만들 때 ID는 그래서 연락처,의 관리자, 약속, 서비스 등, 내 응용 프로그램의 모든 항목에서 고유 :

나는 다음이 모두 별개의 "테이블"(또는 종류?)이므로 OK는 서로 고유하지만 Audit Trail은 자체 카운팅 공간을 가질 수 있으므로 내 "실제"카운트를 방해하지 않습니다. 데이터 "

올바른 방법으로이 질문을합니다.이 Entity/Kind/Property/Key 항목을 실제로 알아 내려했지만 실제로 어떻게 모든 것을 이해했는지 확신 할 수 없습니다. ctually 후드에서 작동합니다!

+0

이드는 모든 종류에서 유일하게 고유하다고 생각합니까? 생성 된 ID는 각 종류마다 고유합니다. 그렇지 않으면'allocate_ids '와 같은 기능은 종류간에 겹치는 id 범위를 할당 할 수 있기 때문에 작동하지 않습니다. –

+0

정확한 용어를 사용하고 있지 않을 수 있습니다 ... 내 응용 프로그램 내에서 '연락처'테이블 (종류)의 단일 행에 대한 ID가 예를 들어 '약속의 한 행과 충돌하지 않는 것 같습니다 '테이블 (종류). 실제로 "일화"였지만 응용 프로그램의 첫 번째 행이 "admin"이고 번호가 31014이고 다음으로 "연락처"는 29003이고 세 번째는 31034의 ID를 가진 "사용자"였고, 그리고 내가 볼 수있는 한 충돌은 없습니다! – johnvdenley

+0

예, 충돌이 발생하지 않습니다. 이 정수는 크고 희소합니다. 64 비트 서명과 같은 것입니다. (키의 id 정의에 대한 특정 참조를 찾을 수 없습니다). 귀하의 제한된 관찰에서 그렇습니다. 그것은 모든 종류에 걸쳐 독특 할 수 있습니다. 다음은 테스트입니다. 수동으로 동일한 정수 ID를 가진 두 가지 종류의 키를 만듭니다. 효과가있을 것입니다. (당신이 객관화로 그런 일을 할 수 있다고 가정 할 때) –

답변

2

AppEngine은 높은 확장 성을 위해 설계되었으며 종류별 고유 식별자가 부족하여 결과 중 하나입니다. 사람들은 종종 유사한 관련 역량에 대해 묻지 만 제공하는 것이 효율적이지 않습니다. Datastore는 거대한 키 - 값 저장소로 설명되는 BigTable을 기반으로하는 NoSQL 디자인입니다. 키 값을 빠르게 검색 할 수 있지만 많은 레코드가 동일한 서버에있을 필요는 없다는 것을 고려하면 일련의 레코드 (Kind)의 정확한 개수를 유지하는 데 너무 많은 오버 헤드가 있습니다.

자신의 코드에서 기능을 강력하게 추가하려고하면 시간이 많이 소요되는 작업을 피할 수 없습니다. 따라서 코드를 호출하면 워크로드와 지연 또는 대기 시간이 길어질 수 있습니다. 아마도 App Engine 개발자는 동일한 문제를 보았고 개발자의 친숙 함보다는 속도를 선택했을 것입니다.

응용 프로그램 코드에서 자신의 개수를 유지하고 데이터 저장소에 저장하는 것을 막을 수있는 방법은 없습니다. 어떤 경우에는 그럴 가치가 있습니다. Brewer의 CAP 이론 (explanation)을 항상 명심하십시오.

+0

큰 반향, 고마워, 그것이 내가 상상 한 방식인데 이상한 제한이있는 것처럼 보였다. 그러나 문제는 없다. : D 그냥 내 데이터베이스에 2^53 개 이상의 행을 만들지 않기를 바래 야합니다.) – johnvdenley

관련 문제