V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
DAOCLOUD
推荐学习书目
Python Cookbook
Using Google App Engine
推荐下载
Latest Google App Engine SDK
其他兼容技术
AppScale
darasion

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

  •  
  •   darasion · Dec 27, 2010 · 4253 views
    This topic created in 5612 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   ·   3163 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:04 · PVG 11:04 · LAX 20:04 · JFK 23:04
    ♥ Do have faith in what you're doing.