DAOCLOUD
推荐学习书目
Python Cookbook
Using Google App Engine
推荐下载
Latest Google App Engine SDK
其他兼容技术
AppScale
darasion

如果想在 Datastore 中保存用户特定的参数设置,你会怎样做?

  •  
  •   darasion · Dec 27, 2010 · 4284 views
    This topic created in 5624 days ago, the information mentioned may be changed or developed.
    有没有比这样更好的办法呢:

    class User(db.Model):
    user_name=db.StringProperty()
    ....
    settings1=db.XXXProperty()
    settings2=db.XXXProperty()
    settings3=db.XXXProperty()
    ....
    3 replies    1970-01-01 08:00:00 +08:00
    Livid
        1
    Livid  
    MOD
    PRO
       Dec 27, 2010
    用户的某个 property 是 pickle?
    darasion
        2
    darasion  
    OP
       Dec 27, 2010
    @Livid 我也想这样做。但不知道哪一种更好。或者有没有更好的办法。

    Model 结构什么的一旦定下来,想改似乎挺麻烦的。囧。
    darasion
        3
    darasion  
    OP
       Dec 28, 2010
    我想到了3种解决办法:

    办法1:
    把参数设置放在User里边。

    class User(db.Model):
    #用户相关属性
    ....
    #各个参数设置属性
    ...


    办法2:
    用ReferenceProperty将用户和参数设置联系起来。

    class User(db.Model):
    #用户相关属性
    ....

    class Settings(db.Model):
    user = db.ReferenceProperty(reference_class=User,
    collection_name='settings')
    #各个参数设置属性
    ....


    办法3:
    用pickle把所有参数放入一个Property里边。
    http://appengine-cookbook.appspot.com/recipe/pickledproperty

    class User(db.Model):
    #用户相关属性
    ....
    settings=db.PickledProperty()


    问了一下 @keakon ,他说:
    『性能和空间占用上来说,3是最优的

    实现上来说,1是最方便的,但是更改时比较麻烦,如果改动不频繁,建议用这种

    2无论性能还是实现都是最差的』



    最终,我还是选择了PickledProperty:

    http://appengine-cookbook.appspot.com/recipe/pickledproperty
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3095 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 13:12 · PVG 21:12 · LAX 06:12 · JFK 09:12
    ♥ Do have faith in what you're doing.