Google App Engine上的论坛应用程序的数据建模建议

时间:2010-01-17 02:28:18

标签: python google-app-engine data-modeling

我正在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,这是RDBMS世界中的多对一关系吗?如果是这样,怎么样?

修改

Jaiku使用类似的东西

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

2 个答案:

答案 0 :(得分:2)

首先,为什么不使用user = db.UserProperty()代替user = db.StringProperty()

其次,我很确定你应该使用它的工作方式,并且更具可读性并在以后测试性能,原因有三:

  1. KISS(保持简单)
  2. 早期优化很糟糕
  3. 你不能改进你无法衡量的东西
  4. 因此,当您准备好进行衡量时,请启动优化。

    我不是这样说的,因为我对RDBMS,No-SQL DBMS或Google Datastore性能优化一无所知,但是因为我通常从测试中获得了所有这些知识,这似乎与以前的假设相矛盾比我想象的还要好。

答案 1 :(得分:-2)

您可能需要查看a good tutorial on creating a php forum from scratch。当然,这是关于PHP的,但它也涵盖了论坛设计的一般概述。

基本上,不要拆分帖子和回复或帖子和帖子。稍后会导致一些非常尴尬的查询。线程只是一个不回复任何内容的帖子。