2013-07-13 3 views
0

저는 Google의 응용 프로그램 엔진을 기반으로하는 아주 간단한 웹 응용 프로그램을 작성하고 있습니다. 파이썬과 구글의 데이터 저장소로 작업하는 것은 이번이 처음이다.GqlQuery는 임의의 결과를 반환합니다.

응용 프로그램의 홈 페이지에 몇 가지 질문이 표시되어야합니다. 이러한 질문은 질문이라는 테이블에 저장됩니다.

class Question(db.Model): 
    question_id = db.IntegerProperty() 
    question = db.StringProperty() 

다음 코드는이 테이블의 모든 항목을 선택하고 데이터를 템플릿으로 커밋합니다.

questions = db.GqlQuery('SELECT * FROM Question ORDER BY question_id') 

# debugging loop 
for question in questions: 
    logging.info(questions.question_id) 

template_values = { 
    'questions' : questions 
} 

마지막으로, 템플릿은 index.html에 질문을 표시합니다.

{% for question in questions %} 
    // HTML-CODE 
    {{ question.question }} 
    // HTML-CODE 
{% endfor %} 

사실, (아주 기본적인) 작업은 잘 실행되지만 프로그램은 목록을 두 번 건너 뛰거나 추가합니다. 이것은 완전히 무작위로 발생합니다. 나는 그것이 몇 시간 동안 튀어 나오지 않을 때 사라질 수도 있다고 생각했다. 디버깅 루프가 이미 잘못된 ID를 나타 내기 때문에 GqlQuery 문 바로 다음에 오류가 발생해야합니다.

건너 뛰거나 추가되는 질문은 무작위로 표시되며 여기에는 패턴이 표시되지 않습니다. 단 하나의 질문은 예상보다 많거나 적은 질문입니다. 한 질문이 건너 뛰게되고 다른 질문이 동시에 두 번 추가 된 적이 결코 보이지 않습니다. 테이블 질문에는 현재 5 개의 항목 만 포함되어 있으므로 매우 관리하기 쉽습니다.

나는 이것이 내 경험 부족의 결과가 아니기를 바랍니다. 나는이 문제에 대해 며칠을 보냈다.

미리 감사드립니다.

답변

0

코드에 질문을 추가하거나 제거하면이 겉으로보기에는 잘못된 동작이 발생할 수 있습니다. 기본적으로 App Engine 쿼리는 "결국 일관성이 있습니다."즉, 쿼리가 데이터 저장소의 실제 상태를 즉시 반영하지는 않습니다. 쿼리 일관성에 대한 자세한 내용은 https://developers.google.com/appengine/docs/python/datastore/queries#Python_Data_consistency에서 확인할 수 있습니다.

기사에서 알 수 있듯이 조상 쿼리는 강하게 일관됩니다. 그렇게하기 위해서는 모든 질문을 동일한 "엔티티 그룹"에 넣어야합니다. 그렇게하기는 쉽지만 초크 포인트가 반드시 필요하며 질문을 만들거나 수정할 수있는 속도가 제한됩니다. 귀하의 사이트에 많은 수의 사용자가 있어도 질문이 거의 변경되지 않는다는 것을 알고있는 경우에만 적합합니다.

이것이 문제가 아니라고 생각하는 경우 응용 프로그램에서 질문을 작성/수정/삭제하는 방법에 대한 자세한 정보를 게시 할 수 있습니까?

관련 문제