12

写真ギャラリーがあり、写真には 10 万人以上のファンがいる可能性があるとします。どのndb設計がより効率的ですか?

class picture(ndb.model):
    fanIds = ndb.StringProperty(repeated=True)
    ... [other picture properties]

また

class picture(ndb.model):
    ... [other picture properties]

class fan(ndb.model):
    pictureId = StringProperty()
    fanId = StringProperty()

ndb の繰り返しプロパティに追加できるアイテムの数に制限はありますか? また、繰り返しプロパティに大量のアイテムを保存すると、パフォーマンスが低下しますか? 繰り返しプロパティを使用すると効率が悪い場合、その用途は何ですか?

4

2 に答える 2

33

100 ~ 1000 を超える値がある場合は、繰り返しプロパティを使用しないでください。(おそらく 1000 はすでにそれを推進しています。) それらはそのような用途のために設計されたものではありません。

于 2013-03-14T19:26:03.933 に答える
5

一般的に、v1 ははるかに安価です。

読み取り/書き込みコストに関しては、エンティティのフェッチ/書き込みごとに支払うため、エンティティの数を減らしたいと考えています。バージョン1は安くなります。写真を取得するたびにすべてのファンを取得すると、大幅に安くなります。

ただし、各エンティティは 1MB に制限されています。10 万人以上のファンがいる場合、fanId のサイズによってはその制限に達する可能性があります。これは他の画像データをカウントしていないため、1MB の制限を超える可能性があります。オーバーフローのケースを処理するには、さらに複雑なコードを追加する必要があります。

大きなエンティティは、小さなエンティティよりもフェッチに時間がかかります。常にすべてのファンを一度に取得する場合は、v1 の方が適しています。ある時点で 5 人のファンしか取得しない場合は、v2 の方が高速である可能性があります (可能性があるだけです)。一方、100,000 人のファン エンティティをプルしようとすると、それには永遠に時間がかかります。

于 2013-03-13T15:35:06.217 に答える