4

私は Google アプリ エンジンについて調べており、それをよりよく理解するためのサンプルを準備しています。

簡単に言えば、ユーザーはカレンダーのように、その月の毎日のエントリを記録できます。また、ユーザーは月単位でエントリを表示できます。したがって、一度に 30 個を超えることはありません。

最初に私は使用dbしていましたが、1 対多の関係は簡単でした。

しかし、 に出会ってからndb、1 対多の関係をモデル化するには 2 つの方法があることに気付きました。

1) 構造化されたプロパティは、User モデルで繰り返されるプロパティのように機能するようです。1 人のユーザーを取得すると、そのユーザーが入力したすべてのレコードが自動的に取得されるということですか? (例: 1 年中) でも、これはあまり効率的ではありませんね。利点は、関連するすべてのデータを 1 回の読み取り操作で取得できることだと思います。

    from google.appengine.ext import ndb

    class User(UserMixin, ndb.Model):
        email = ndb.StringProperty(required = True)
        password_hash = ndb.TextProperty(required = True)
        record = ndb.StructuredProperty(Record, repeated=True)

    class Record(ndb.Model):            
        notes = ndb.TextProperty()

2)代わりに、おそらくより古典的な方法を使用できます。

    class User(UserMixin, ndb.Model):
        email = ndb.StringProperty(required = True)
        password_hash = ndb.TextProperty(required = True)

    class Record(ndb.Model):
        user = ndb.KeyProperty(kind=User)
        notes = ndb.TextProperty()

私のユースケースではどちらがより良い方法ですか?

4

1 に答える 1

8

KeyProperty の代わりに StructuredProperty を使用することの欠点は、StructuredProperty を使用すると、合計エンティティ サイズ (1MB) の制限が User とそれに含まれるすべてのレコードの合計に適用されることです (構造化プロパティは User エンティティの一部としてシリアル化されるため)。KeyProperty では、各レコード自体に 1 MB の制限があります。

于 2013-06-19T18:08:53.793 に答える