Мне нужно хранить данные, как показано ниже:Как правильно сохранить данные в хранилище данных 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()
Спасибо, Ворон. Что такое имена полей? Должен ли я иметь 3-й список? –
@LA_ Если ваш список имен полей статичен, вы, вероятно, захотите сохранить имя индекса <-> и даже не хранить его в классе User. Просто инициализируйте всех в массивы одинакового размера с хорошими значениями по умолчанию (нули?). Но если вы хотите делать какие-либо запросы на основе определенных именных баллов, вам может потребоваться явно указать каждое поле, а не хранить значения/баллы в списках. Я уверен, что это можно сделать динамически - не нужно вводить 200 свойств (и, возможно, модель Expando будет полезна, если список полей не является статическим). – Raven