Рекомендации по моделированию данных для приложения форума на Google App Engine - PullRequest
3 голосов
/ 17 января 2010

Я пишу простое похожее на форум приложение в Google App Engine и пытаюсь избежать проблем с масштабируемостью. Я новичок в этом подходе, не связанном с RBDMS, и я хотел бы избежать ловушек с самого начала.
Дизайн форума довольно прост, посты и ответы будут единственными понятиями. Как лучше всего подойти к проблеме, если на форуме миллионы постов?

Модель пока (лишена бесполезных свойств):

class Message(db.Model):  
    user = db.StringProperty() # will be a google account user_id  
    text = db.TextProperty() # the text of the message  
    reply_to = db.SelfReferenceProperty() # if null is a post, if not null a reply (useful for reply-to-reply)  

Разделение модели, я думаю, что это быстрее, потому что она будет запрашивать меньше элементов при извлечении "всех сообщений":

class Post(db.Model):  
    user = db.StringProperty() # will be a google account user_id  
    text = db.TextProperty() # the text of the message  

class Reply(db.Model):  
    user = db.StringProperty() # will be a google account user_id  
    text = db.TextProperty() # the text of the message  
    reply_to = db.ReferenceProperty(Post)  

Это отношение многие-к-одному в мире СУБД, следует ли использовать ListProperty вместо этого? Если да, то как?

Изменить:

Джайку использует что-то вроде этого

class StreamEntry(DeletedMarkerModel):  
...  
    entry = models.StringProperty()     # ref - the parent of this, should it be a comment  
...

Ответы [ 2 ]

2 голосов
/ 17 января 2010

Во-первых, почему бы вам не использовать user = db.UserProperty() вместо user = db.StringProperty()?

Во-вторых, я вполне уверен, что вы должны использовать все, что работает, и более читабельно, а потом протестировать производительность по трем причинам:

  1. ПОЦЕЛУЙ (будь проще)
  2. Ранние оптимизации плохие
  3. Вы не можете улучшить то, что не можете измерить

Итак, когда вы будете готовы к измерению, начните оптимизацию.

Я говорю это не потому, что ничего не знаю об оптимизации производительности СУБД, СУБД No-SQL или Google Datastore, а потому, что я обычно получаю все свои знания об этом из тестирования, которое, как правило, чаще противоречит предыдущим предположениям чем я ожидал.

0 голосов
/ 17 января 2010

Возможно, вы захотите взглянуть на хороший учебник по созданию php-форума с нуля . Конечно, речь идет о PHP, но он также охватывает общий обзор дизайна форума.

По сути, не разделяйте сообщения и ответы или темы и сообщения. Это приведет к некоторым действительно неловким запросам позже. Тема - это просто сообщение, которое ни на что не отвечает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...