darasion
V2EX  ›  Google App Engine

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

By darasion at 2010 年 12 月 27 日 · 4626 次点击
有没有比这样更好的办法呢:

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
PRO
   2010 年 12 月 27 日
用户的某个 property 是 pickle?
darasion
   2
darasion  
OP
   2010 年 12 月 27 日
@Livid 我也想这样做。但不知道哪一种更好。或者有没有更好的办法。

Model 结构什么的一旦定下来,想改似乎挺麻烦的。囧。
darasion
   3
darasion  
OP
   2010 年 12 月 28 日
我想到了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
DAOCLOUD
推荐学习书目
› Python Cookbook
› Using Google App Engine
推荐下载
› Latest Google App Engine SDK
其他兼容技术
› AppScale
© 2026 V2EX · 25ms · 3.9.8.5