V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DAOCLOUD
推荐学习书目
Python Cookbook
Using Google App Engine
推荐下载
Latest Google App Engine SDK
其他兼容技术
AppScale
darasion
V2EX  ›  Google App Engine

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

  •  
  •   darasion · 2010-12-27 19:42:54 +08:00 · 3745 次点击
    这是一个创建于 5083 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有没有比这样更好的办法呢:

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

    Model 结构什么的一旦定下来,想改似乎挺麻烦的。囧。
    darasion
        3
    darasion  
    OP
       2010-12-28 12:15:57 +08:00
    我想到了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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3434 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:45 · PVG 19:45 · LAX 03:45 · JFK 06:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.