2010-07-27 1 views
1

BigTables/JDO의 previous question on handling large numbers of objects에 대한 추가 내용입니다.엔티티 그룹에서 수천 명의 어린이를 올바르게 추가/조작 하시겠습니까?

TransactionAccounttransactions 목록에 최대 10,000 개의 개체가있을 수 있다고 가정 할 때 Goodle 앱 엔진에서 어떻게 작동합니까?

전체 목록을 메모리에로드하지 않고 어떻게 큰 목록에 개체를 추가합니까? (10,000 개의 객체가 메모리에로드되어서는 안된다는 가정하에)

숙제하는 법을 묻지 않으려 고합니다.이 문제를 해결하기 위해 어디에서 시작해야하는지, 앱 엔진 설명서 그리고 구글 검색이 질문이 제기하지만 in the following google groups post을 해결되지 :(

// example only, not meant to compile 
@PersistenceCapable 
public class TransactionAccount { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    public Key key; 
    private long balance; 
    private long transactionCount; 
    @Element(dependent = "true") 
    private List<Transaction> transactions = new ArrayList<Transaction>(); 
    .... 
    public long getBalance() { return balance; } 
} 

@PersistenceCapable 
private class Transaction { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    public Key key; 
    public Date date; 
    public long amount; 
} 

도움이되지 않는다.이 모든 데이터 저장소에 저장되지 것 있도록

답변

1

시도는, 트랜잭션 속성 @NotPersistent을 표시. 당신이 얻을 수 있습니다 주어진 Transa에 대한 트랜잭션 엔티티 ctionAccount는 ancestor query (자세한 내용은 this thread)입니다. 계정 엔티티에 모두 저장되어 있지는 않기 때문에 특정 계정에 대해 임의의 많은 트랜잭션을 저장할 수 있어야합니다.

@Extension(vendorName = "datanucleus", key = "gae.unindexed", value="true") 

계정의 거래는 여전히 목록에 저장 될 수 있지만,이 인덱싱되지 않을 것이다, 그것을 만들 것이다 :

덜 과감한 조치는이 주석으로 인덱싱되지 않은 트랜잭션 속성을 표시하는 것 조금 더 가능하다. 여전히 1MB 엔티티 크기 제한을 10-100k 트랜잭션 근처로 설정하면 @NotPersistent을 사용하면 문제가되지 않습니다.