나는 다음과 같은 데이터를 유지해야합니다GAE 데이터 저장소에 데이터를 올바르게 저장하는 방법은 무엇입니까?
field1value=SomeStringValue
field1score=10
field2value=SomeOtherValue
field2score=20
...
fieldNvalue=SomeNValue
fieldNscore=N
즉 내가 N 필드가 각 필드는 자신의 이름, 거기 점수 저장된 값을가집니다. GAE 데이터 저장소에 이러한 데이터를 올바르게 저장하는 방법은 무엇입니까? 데이터는 필드 이름으로 쉽게 액세스 할 수 있어야합니다. 최종 점수 (field1score + field1score + ... + fieldNscore
)도 계산해야합니다.
N은 약 100이며 데이터베이스의 총 레코드 수는 커집니다.
업데이트. 나는 다음과 같은 방법을 사용하지만 가장 좋은 것이 아니다처럼 보이는했습니다
class User(db.Model):
field_names = db.StringListProperty()
field_values = db.StringListProperty()
field_scores = db.ListProperty(int)
score_value = db.IntegerProperty()
def fields_add(user_key_name, field_name, field_value, field_score):
user = User.get(user_key_name)
if user:
field_names = user.field_names
field_values = user.field_values
field_scores = user.field_scores
if field_name in user.field_names:
field_index = user.field_names.index(field_name)
field_values[field_index] = field_value
field_scores[field_index] = field_score
else:
field_names.append(field_name)
field_values.append(field_value)
field_scores.append(field_score)
user.field_names = field_names
user.field_values = field_values
user.field_scores = field_scores
# TODO: update user.score_value
user.put()
감사합니다. 필드 이름은 무엇입니까? 세 번째 목록이 있어야합니까? –
@LA_ 필드 이름 목록이 정적 인 경우 이름을 으로 유지하고 User lookup을 User 클래스에 저장하지 않으려합니다. 좋은 기본값 (제로?)을 가진 동일한 크기의 배열로 모두 초기화하십시오. 그러나 특정 명명 된 점수를 기반으로 쿼리를 수행하려는 경우 값/점수를 목록에 저장하는 대신 각 필드를 명시 적으로 나열하는 것이 좋습니다. 나는 이것을 동적으로 할 수 있다고 확신한다 - 200 개의 속성을 입력 할 필요가 없다. (그리고 필드 목록이 정적이 아닌 경우 Expando 모델이 적절할 것이다.) – Raven