私は現在、次のモデル構造を持っています (関連するもののみを以下に貼り付けます):
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
各ユーザーは、uuId エンティティ プロパティに入る iOS アプリ (例: AAAAAAAA-AAAA-AAAA-AAAA-000000000000) によって提供される一意のコードによって一意に識別されます。現在、「userData」種類のキー名としても設定しています。アイデアは、将来のクエリで、iOS が UUID を送信し、必要なのはキーでクエリを実行することだけであり、これは超高速です。ただし、ここでのトレードオフは、keyName が appengine で生成されたものの約 2 倍のサイズであるため、インデックス サイズが大きくなるということです。
ですから、私の最初の質問は、この場合、何をするのが最も効率的ですか? 大きなキーを使用しますか?または、より遅い読み取りクエリを使用しますか?
質問 #2 同様のトレードオフが応答テーブルでも発生します。現在、userData uuId と別のテーブルの別のキーを連結して、次のような応答エンティティのダブル サイズの keyName を形成しています。
AAAAAAAA-AAAA-AAAA-AAAA-000000000000agtzfnNmYmFja2VuZHINCxIGc2hvZXMyGI56DA
私がこれを行っているのは、「pID==x & uuID==y の場所」という質問をする多くのクエリを実行することがわかっているためです。それもひとつに凝縮。
皆さんはどう思いますか?大きなキーは、高速読み取りを行うための合理的な決定ですか? 読み取りは速くなりますか?
更新 私が検討しているもう1つのことは、次のコードです。
import md5
m=md5.new()
lKey = "AAAAAAAA-AAAA-AAAA-AAAA-000000000000agtzfnNmYmFja2VuZHINCxIGc2hvZXMyGI56DA"
m.update(lKey)
print m.hexdigest()
これは、より短い一意の ID "569e1b8c6e469d703c8e7c2a739c5812" を返します。MD5 は一方通行であることはわかっているので、ここでの唯一の危険は、後戻りできないことですが、それがリスクであるとはまったく確信していないので、実際にはこのルートを使用するだけかもしれません。皆さんはどう思いますか?
ありがとう!