2010-11-24 5 views
1

저는 GAE에서 호스트되는 학교를위한 소프트웨어를 구축하고 있으며, 생성되었을 때 새로운 학생에게 식별자를 생성하고 시퀀스를 생성해야합니다. 실제로는 "키"가 될 필요는 없습니다. 이 번호가 1 씩 증가해야합니다. 새 학생이 추가 될 때마다 학교 카드에 인쇄 된 학생 번호가됩니다.Google App Engine 증분 식별자 (ID)

low level API를 사용하여, 나는이 일을 해요 :

student = new Entity("student") 
student << params.subMap(["name", "birthdate"]) 
student.save() 

그것은 ID를 만드는 것하지만 하나에 의해 증가되지, 그것은 종류의 랜덤 ... 나는 또한 이해하기 위해 노력

KeyRange, 그러나 그것에서 아무것도 얻지 않았다.

일부 도움이 되었습니까?

답변

1

당신은 Entity(String kind, String keyName) 생성자를 사용하여 Entity을 만들 수 있습니다

new Entity("student", "" + id); 

을만큼 id 모든 학생들에서 고유로.

증가하는 카운터를 유지하려면 일반 데이터 스토어 엔티티를 사용하여 개수를 저장하면됩니다. 데이터 스토어 (트랜잭션)의 동시성 보호는 순차적 엔티티 번호 매기기를 깔끔하게 보장합니다. Sharded 카운터는 필연적으로 순차적 ID를 제공하지 않을 것입니다 (@Nick Johnson에게 감사). 키 이름을 가져 오기 위해

한 가지 방법은 (here에서)입니다 :

DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); 
Key key = KeyFactory.createKey("student", "" + id) 
Entity entity = ds.get(key); 
+3

샤드 된 카운터는 단조로운 증가를 제공하지 않습니다. 샤드 카운터는 App Engine이 내부적으로 ID를 할당하기 위해 사용하는 것입니다. 절대적으로 순차적이어야하는 경우 관련 업데이트 속도 제한이있는 표준 비표준 카운터가 필요합니다. –

+0

@ 닉 존슨 - 감사합니다. 나는 갱신 할 것이다. – sje397