Я читал где-нибудь, что умножение более эффективно в C/C++; Никакая идея относительно интерпретируемых языков - различие не, вероятно, незначительна из-за всех других издержки.
, Если это не становится палкой проблемы с тем, что более удобно в сопровождении/читаемо - я ненавижу его, когда люди говорят мне это, но таким образом верный.
Взгляните на Создание масштабируемых сложных приложений на платформе приложений ( pdf ), увлекательный доклад Бретта Слаткина на Google I / O . Он обращается к проблеме создания масштабируемой службы обмена сообщениями, такой как Twitter.
Вот его решение с использованием свойства списка:
class Message(db.Model):
sender = db.StringProperty()
body = db.TextProperty()
class MessageIndex(db.Model):
#parent = a message
receivers = db.StringListProperty()
indexes = MessageIndex.all(keys_only = True).filter('receivers = ', user_id)
keys = [k.parent() for k in indexes)
messages = db.get(keys)
Этот ключевой запрос находит только индексы сообщений с получателем, равным указанному вами без десериализации и сериализации списка получателей. Затем вы используете эти индексы, чтобы получать только те сообщения, которые вам нужны.
Вот неправильный способ сделать это:
class Message(db.Model):
sender = db.StringProperty()
receivers = db.StringListProperty()
body = db.TextProperty()
messages = Message.all().filter('receivers =', user_id)
Это неэффективно, потому что запросы должны распаковывать все результаты, возвращаемые вашим запросом . Итак, если вы вернули 100 сообщений с 1000 пользователей в каждом списке получателей, вам придется десериализовать 100, 000 (100 x 1000) перечисляет значения свойств. Слишком дорого с точки зрения задержки хранилища данных и процессора.
Сначала все это меня сильно сбило с толку, поэтому я написал краткое руководство по использованию свойства списка . Наслаждайтесь :)
Я не знаю, лучший дизайн для социального приложения, но jaiku был перенесен в App Engine ] первоначальным создателем, когда компания была приобретена Google, так что это должно быть разумным.
См. раздел Актеры, тигры и медведи, о боже! в design_funument.txt . Сущности определены в common / models.py , а запросы находятся в common / api.py .