我目前有以下模型结构(只有下面粘贴的相关结构):
class userData(ndb.Model):
uuId = ndb.StringProperty()
fId = ndb.IntegerProperty()
name = ndb.StringProperty()
email = ndb.StringProperty()
gender = ndb.BooleanProperty()
age = ndb.StringProperty()
created = ndb.DateTimeProperty(auto_now_add=True)
lastUpdate = ndb.DateTimeProperty()
class responses(ndb.Model):
pId = ndb.KeyProperty(kind=shoes2)
uuId = ndb.KeyProperty(kind=userData)
act = ndb.StringProperty()
date = ndb.DateTimeProperty(auto_now_add=True)
问题 #1
每个用户都由 iOS 应用程序提供的唯一代码(例如:AAAAAAAA-AAAA-AAAA-AAAA-000000000000)唯一标识,该代码进入 uuId 实体属性。目前我还将它设置为“userData”类型的键名。这个想法是,在未来的查询中,iOS 会向我发送 UUID,而我所需要的只是通过非常快的 Key 进行查询。但是这里的权衡是索引大小会大幅增加,因为我的 keyName 大约是 appengine 生成的大小的两倍。
所以我想我的第一个问题是,在这种情况下,最有效的做法是什么?使用大钥匙?还是使用较慢的读取查询?
问题 #2 在响应表中也发生了类似的权衡。目前,我将 userData uuId 和另一个表中的另一个键连接起来,为响应实体形成一个双倍大小的 keyName,如下所示:
AAAAAAAA-AAAA-AAAA-AAAA-000000000000agtzfnNmYmFja2VuZHINCxIGc2hvZXMyGI56DA
我这样做是因为我知道我会运行很多查询,我会问:“哪里 pID==x & uuID==y”,所以我想既然我会做很多这些,可能以及将其浓缩为一个。
你们有什么感想?大键是快速读取的合理决定吗?我的阅读速度会更快吗?
更新 我正在考虑的另一件事是以下代码:
import md5
m=md5.new()
lKey = "AAAAAAAA-AAAA-AAAA-AAAA-000000000000agtzfnNmYmFja2VuZHINCxIGc2hvZXMyGI56DA"
m.update(lKey)
print m.hexdigest()
它返回一个较短的唯一 ID:“569e1b8c6e469d703c8e7c2a739c5812”。我知道MD5只是一种方式,所以这里唯一的危险是我无法倒退,但我不确定这是否有风险,所以我实际上可能只是走这条路。你们有什么感想?
谢谢!