Домен выглядит следующим образом:
class Poll(db.Model):
question = db.StringProperty()
...
class Choice(db.Model):
poll = db.ReferenceProperty(Poll)
choice = db.StringProperty()
class Vote(db.Model):
user = db.ReferenceProperty(User)
choice = db.ReferenceProperty(Choice)
(Это на самом деле не окончательная модель, это просто псевдограмма)
Вещи, которые мне нужно запросить:
- Общее количество голосов для каждого опроса на экране
- Общее количество голосов для каждого варианта для каждого опроса на экране
- Если проголосовал текущий пользователь, для каждого опроса
Я придумал какую-то другую схему, используя общие счетчики, свойства списка, и ни одна из них (с моими внутренними ограничениями), похоже, не работает.О, и, конечно, это должно быть очень быстро:)
Не могли бы вы помочь мне смоделировать мои данные?
Спасибо
Редактировать: Спасибо @Ник Джонсон Я могу более точно описать мою проблему, он предложил эту схему
class Poll(db.Model):
question = db.StringProperty(indexed=False, required=True)
choices = db.StringListProperty(indexed=False, required=True)
votes = db.ListProperty(int, indexed=False, required=True)
class Vote(db.Model):
# Vote is a child entity of Poll, so doesn't need an explicit reference to it
# Vote's key name is the user_id, so users can only vote once
user = db.ReferenceProperty(User, required=True)
choice = db.IntegerProperty(required=True)
Проблема в том, что я не могу эффективно запросить показ того, проголосовал ли пользователь по определенному вопросу.опрос.Кроме того, я хочу, чтобы эта шма сопротивлялась, скажем, 1 миллиону голосов за опрос или что-то в этом роде (возможно, я бы никогда туда не попал, но я бы хотел прицелиться туда)как это:
class PollIndex(db.Model):
# PollIndex is child of Poll
voters = db.ListProperty(db.Key)
voters_choices = db.ListProperty()
# other search parameters
Тогда, когда мне нужно запросить список опросов, я могу сделать это только с 2 запросами:
# get keys from pollindex where user is not there
# get keys from pollindex where user is there
# grabb all the polls
Еще одна крутая вещь, что если избирателиувеличение размера я могу динамически добавить больше PollIndexes
Что вы думаете об этом подходе?