【发布时间】:2014-09-30 21:48:11
【问题描述】:
我有一个名为 UserModel 的模型,我知道它永远不会超过 10000 个实体。我在 UserModel 中没有任何独特的东西可以用来创建密钥。因此我决定使用这种格式为 USRXXXXX 的字符串键。
其中 XXXXX 代表序列号。例如 USR00001、USR12345
因此我选择了以下方式来生成 ID
def generate_unique_id():
qry = UserModel.query()
num = qry.count() + 1
id = 'USR' + '%0.5d' % num
return id
def create_entity(model, id, **kwargs):
ent = model.get_or_insert(id, **kwargs)
# check if its the newly created record or the existing one
if ent.key.id() != id:
raise InsertError('failed to add new user, please retry the operation)
return True
问题:
这是实现固定宽度序列计数的最佳方法吗?这个解决方案是否是最优的和惯用的?
像上面那样使用 get_or_insert 可以保证我永远不会有重复的记录。
它会增加我的帐单,因为计算我在没有任何过滤器的情况下执行 UserModel.query() 的记录数。在某种程度上,我正在获取所有记录。或者直到我在 qry 对象上使用 fetch api 才会出现计费?
【问题讨论】:
标签: google-app-engine google-cloud-datastore app-engine-ndb